GithubHelp home page GithubHelp logo

files_inotify's Introduction

files_inotify

PHPUnit

Adds support detecting changes in local external storages with occ files_external:notify

Requirements

This app uses the php inotify extensions which is required to be installed before this app can be enabled. The php inotify extension can be installed from your distribution's package or pecl.

Usage

To detect changes you need to run the files_external:notify command for the configured local external storage.

Note that this command runs continuously and should be started in the background by an init system or other task manager for best usage.

Find the id of the external storage that should be checked

occ files_external:list

+----------+-------------+------------+-----------------------+------------------------+------------+------------------+-------------------+
| Mount ID | Mount Point | Storage    | Authentication Type   | Configuration          | Options    | Applicable Users | Applicable Groups |
+----------+-------------+------------+-----------------------+------------------------+------------+------------------+-------------------+
| 5        | /test       | Local      | None                  | datadir: "....."       |            |                  |                   |
+----------+-------------+------------+-----------------------+------------------------+------------+------------------+-------------------+

Run the filesystem watch

occ files_external:notify -v 5

Scalability notes

Due to the nature of inotify the memory requirements of listening for changes scales linearly with the number of folders in the storage.

Additionally it's required to configure fs.inotify.max_user_watches on the server to be higher than the total number of folders being watched.

files_inotify's People

Contributors

icewind1991 avatar tmolitor-stud-tu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

files_inotify's Issues

Working great, but I have a question about how to handle different logins for the same share.

I have a SMB share that located on a Synology. For anyone familiar with Synology the user home folders are located at /homes/<username> but they are presented to the user as just /home.

So now to Nextcloud, I have and external storage that looks like this;

Folder Name: /
External Storage: SMB/CIFS
Authentication: Log-In credentials, save in database
Configureation:
    Host: 123.456.1.9
    Share: /home
    Remote Subfolder: 
    Domain:

This share is assigned to two different users, and each user sees 2 completely different things which is exactly how it should be. But how does this affect files_inotify since the SMB username and password still need to be provided when running occ files_external:notify.

I currently have 2 services setup to monitor that share, one for each user;

occ files_external:notify -v 8 -u thatguy -p pineapplebelongsonpizza123

occ files_external:notify -v 8 -u thewifeofthatguy -p pineappleisgross69

Is this the correct way to handle a share like this?

And what about multiple users on a normal share? Do I still need to run an individual command for each SMB account? Or can I just run the scan under a single user?

Error while running self-test, no changes detected

Hi, I am running this app via systemd on Archlinux. My service looks like this:

cat /etc/systemd/system/[email protected]
# to be enabled specifying the mountID, such as
# systemctl enable --now [email protected]
[Unit]
Description=PHP inotify for Nextcloud for mountID %i

[Service]
User=http #my http user
Type=simple
ExecStart=/usr/share/webapps/nextcloud/occ files_external:notify %i
Nice=19
IOSchedulingClass=idle
IOSchedulingPriority=7
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

The app is correctly installed.
I can also manually run it via:

sudo -u http ./occ files_external:notify -vvv 1

But I am immediately getting the following error:

Error while running self-test, no changes detected

After a minute, the app stops with no further info. Any idea why? Is this the correct behaviour?

Message loop: No stream arrays were passed at

After installing I collected 20GB of log with just this line in a matter of hours.

{"reqId":"WN0Ln3m33RFBhC7pk2TR","level":3,"time":"2018-05-13T18:09:04+00:00","remoteAddr":"","user":"--","app":"PHP","method":"--","url":"--","message":"stream_select(): No stream arrays were passed at \/www\/cloud\/apps\/files_inotify\/lib\/Storage\/NotifyHandler.php#181","userAgent":"--","version":"13.0.0.14"}

I'm not sure how the $read array becomes invalid, but adding ' && !empty($read)' in the while statement seems to help.

files_notify stoped working after upgrading to v0.1.6

I get following error after upgrading files_notify to 0.1.6

[abc@abc ~]$ sudo -u http /usr/bin/php -f /usr/share/webapps/nextcloud/occ files_external:list
+----------+-------------+---------+---------------------+------------------------------+---------+------------------+-------------------+
| Mount ID | Mount Point | Storage | Authentication Type | Configuration                | Options | Applicable Users | Applicable Groups |
+----------+-------------+---------+---------------------+------------------------------+---------+------------------+-------------------+
| 2        | /[ CUT ]    | Local   | None                | datadir: [      CUT        ] |         |                  | users             |
+----------+-------------+---------+---------------------+------------------------------+---------+------------------+-------------------+
[abc@abc ~]$ sudo -u http /usr/bin/php -f /usr/share/webapps/nextcloud/occ files_external:notify -vvv 2
Mount of type "Local" does not support active update notifications

I run NextCloud v17.0.9 with PHP v7.3.10 on Arch Linux.

Hello

Error: this app cannot be enabled because it makes the server unstable

I try to start the plugin. but failed

The app cannot be activated, it would make the server instable.

when i try to activate the app i receive this message.
The app cannot be activated, it would make the server instable.
i have installed inotify-tolls .
Server configuration

Operating system: Centos 7.4.1708

Web server: Apache 2

Database: Postgresql 9.2.23

PHP version: 7.0.26

Nextcloud version: 12.0.4

best regards

[Question] How do I know it is working?

With the command below,

D=`date +%Y.%m.%d-%H.%M.%S`
occ files_external:notify -vvv 15 2>&1 \
	> "/mnt/logs/notify/notify-${D}.log"

The only output I get from the log is:
Self-test successful

Does it mean it does not catch any changes in the file system? The external_storage is a local mounted SMB share.
I am sure it is running as the command is listed on ps.

root@3e22d5ed147e:/# ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.0    208     0 ?        Ss   22:09   0:00 /package/admin/s6/command/s6-svscan -d4 -- /run/service
root          15  0.0  0.0    212     0 ?        S    22:09   0:00 s6-supervise s6-linux-init-shutdownd
root          17  0.0  0.0    200     0 ?        Ss   22:09   0:00 /package/admin/s6-linux-init/command/s6-linux-init-shutdownd -c /run/s6/basedir -g 3000 -C -B
root          82  0.0  0.0    212     0 ?        S    22:09   0:00 s6-supervise s6rc-oneshot-runner
root          83  0.0  0.0    212     0 ?        S    22:09   0:00 s6-supervise s6rc-fdholder
root          84  0.0  0.0    212     0 ?        S    22:09   0:00 s6-supervise custom-svc-start-notify
root          85  0.0  0.0    212     0 ?        S    22:09   0:00 s6-supervise svc-cron
root          86  0.0  0.0    212     0 ?        S    22:09   0:00 s6-supervise svc-mod-universal-cron
root          87  0.0  0.0    212     0 ?        S    22:09   0:00 s6-supervise svc-nginx
root          88  0.0  0.0    212     0 ?        S    22:09   0:00 s6-supervise svc-php-fpm
root          96  0.0  0.0    188     0 ?        Ss   22:09   0:00 /package/admin/s6/command/s6-ipcserverd -1 -- /package/admin/s6/command/s6-ipcserver-access -
root         478  0.0  0.0  18428  5884 ?        Ss   22:09   0:00 nginx: master process /usr/sbin/nginx
root         481  0.0  0.0   1596   768 ?        Ss   22:09   0:00 /usr/sbin/crond -f -S -l 5
root         483  0.0  0.0   2284  1536 ?        Ss   22:09   0:00 /bin/bash ./run custom-svc-start-notify
root         484  0.0  0.1 381720 48512 ?        Ss   22:09   0:00 php-fpm: master process (/etc/php82/php-fpm.conf)
root         485  0.0  0.0   1596   768 ?        Ss   22:09   0:00 /usr/sbin/crond -f -S -l 5
root         494  0.0  0.0   2288  1536 ?        S    22:09   0:00 bash /usr/bin/occ files_external:notify -vvv 15
abc          513  0.3  0.2 155264 76308 ?        S    22:09   0:03 php /app/www/public/occ files_external:notify -vvv 15
abc          514  0.0  0.0  18888  2984 ?        S    22:09   0:00 nginx: worker process
...
abc          564  0.0  0.1 384464 51020 ?        S    22:09   0:00 php-fpm: pool www
abc          630  0.0  0.0   1604   896 ?        S    22:25   0:00 /bin/sh /janus/generate-all.sh
abc          635 38.7  0.5 303344 174100 ?       D    22:25   1:11 /usr/bin/php /app/www/public/occ preview:generate-all -vvv
root         710  0.8  0.0   2596  2176 pts/0    Ss   22:28   0:00 /bin/bash
root         720  0.0  0.0   3008  2048 pts/0    R+   22:28   0:00 ps aux

nextcloud/docker: There are no commands defined in the "files_external" namespace

After adding php-inotify to the Apache based docker image of nextcloud:

RUN pecl install inotify\
  && echo "extension=inotify.so" > /usr/local/etc/php/conf.d/pecl-php-ext-inotify.ini

I then run (as the apache user) php occ app:install files_inotify and get

files_inotify 0.1.12 installed
files_inotify enabled

But when I run (still as the apache user) php occ files_external:notify -v 5
I get

In Application.php line 604:
                                                                    
  [Symfony\Component\Console\Exception\NamespaceNotFoundException]  
  There are no commands defined in the "files_external" namespace.  
                                                                    

Exception trace:
  at /var/www/html/3rdparty/symfony/console/Application.php:604
 Symfony\Component\Console\Application->findNamespace() at /var/www/html/3rdparty/symfony/console/Application.php:657
 Symfony\Component\Console\Application->find() at /var/www/html/3rdparty/symfony/console/Application.php:237
 Symfony\Component\Console\Application->doRun() at /var/www/html/3rdparty/symfony/console/Application.php:149
 Symfony\Component\Console\Application->run() at /var/www/html/lib/private/Console/Application.php:211
 OC\Console\Application->run() at /var/www/html/console.php:100
 require_once() at /var/www/html/occ:11

How to make use of this app?

Contrary to what others have said, this app does run stably here (NC 13). Though I am not certain about its usage. Running 'occ files_external:notify -v ' does immediately show changes in external storage. However, this does not seem to trigger any action on the side of NC. Is this purely informative then? Please clarify, thanks!

Show external modifications in /apps/activity

I use the app to be able to easily access WordPress files, modify themes, etc.
If WordPress changes files, I'd like to see those chances, too.
Currently, only actions initiated by Nextcloud (web interface or sync client) are shown.

Can't get it to work with ZFS mounts

I'm running Nextcloud inside a Docker container on a ZFS-only host. If I try to watch for changes using occ files_external:notify -v 2 I simply receive the error message Mount of type "Lokal" does not support active update notifications.
This is weird, because I had it running using a BTRFS volume with exactly the same permissions.

Inside the container I can run inotifywait -mr /data/example on the mapped files just fine and get notified of any occuring changes.

Any ideas or pointers?

files_external:notify always stops after 60 seconds

I experience problem with files_inotify. It correctly detects changes in local external storage, but it stops running after 60 seconds returning SUCCESS error code. I made a workaround and I automatically restart service.

Platform:
OS: Arch Linux
Nextcloud: 16.0.3.0
PHP: 7.3.8-1
nginx: 1.16.0-1
mariadb: 10.4.7-1

log spamming and only scanning one subfolder

Hey, I run NC 19.0.3 with Postgresql, PHP-fpm 7.4 with Apache2 on Ubuntu 20.04 and get the following error in the logs many many times, so that the log is nearly unreadable. How can i prevent this message to appear?

[PHP] Error: Module 'smbclient' already loaded at Unknown#0

GET /index.php/apps/files/ajax/getstoragestats.php?dir=%2F
from 192.168.178.152 by admin at 2020-09-22T00:58:27+02:00


Could this issue be related to the fact, that the app seem to detect changes only in one subfolder of the local external storage and not in any other subfolder?

E.g.: I have the following structure: ('Data' is the name of the external storage in Nextcloud, 'Datenaustausch', 'Test' and 'geht das' are subfolders in 'Data')

Data
├── Datenaustausch
├── Test
├── geht das

If I now e.g. create a file in Datenaustausch it gets seen and scanned nearly in real-time. But a new file in the geht das or Test subfolder doesn't get seen and scanned until I visit the folder manually in Nextcloud. Is it meant to be this way?

occ files_external:notify fails on local mounts

Original issue: nextcloud/server#6704.

Steps to reproduce

  1. Install inotify extension: pcre install inotify && phpenmod inotify
  2. Run occ files_external:notify -v [MOUNT_ID]
  3. Receive error: Mount of type "Local" does not support active update notifications
  4. Activating the Inotify watcher also fails: "This app cannot be enabled because it makes the server unstable"

Expected behaviour

Changes to local mount should be tracked and updated.

Actual behaviour

The notification monitor fails.

Server configuration

Operating system: Debian 9

Web server: Apache 2 behind Nginx proxy

Database: Postgresql 9.6.4

PHP version: 7.0.19

Nextcloud version: 12.0.3

Updated from an older Nextcloud/ownCloud or fresh install: Updated

Where did you install Nextcloud from: https://nextcloud.com/install

Signing status:

Signing status No errors have been found.

List of activated apps:

App list Enabled: - activity: 2.5.2 - admin_audit: 1.2.0 - announcementcenter: 3.1.0 - audioplayer: 2.1.0 - bookmarks: 0.10.1 - bruteforcesettings: 1.0.2 - calendar: 1.5.5 - checksum: 0.3.5 - comments: 1.2.0 - contacts: 1.5.3 - dashboard: 4.0.5 - dav: 1.3.0 - drawio: 0.8.8 - drop_account: 0.0.6 - external: 2.0.3 - federatedfilesharing: 1.2.0 - federation: 1.2.0 - files: 1.7.2 - files_accesscontrol: 1.2.5 - files_automatedtagging: 1.2.2 - files_downloadactivity: 1.1.1 - files_external: 1.3.0 - files_markdown: 2.0.1 - files_pdfviewer: 1.1.1 - files_reader: 1.0.4 - files_retention: 1.1.2 - files_sharing: 1.4.0 - files_texteditor: 2.4.1 - files_trashbin: 1.2.0 - files_versions: 1.5.0 - files_videoplayer: 1.1.0 - firstrunwizard: 2.1 - gallery: 17.0.0 - keeweb: 0.4.0 - logreader: 2.0.0 - lookup_server_connector: 1.0.0 - mail: 0.7.3 - metadata: 0.5.0 - news: 11.0.5 - nextcloud_announcements: 1.1 - notes: 2.3.1 - notifications: 2.0.0 - oauth2: 1.0.5 - passman: 2.1.4 - password_policy: 1.2.2 - previewgenerator: 1.0.7 - provisioning_api: 1.2.0 - serverinfo: 1.2.0 - sharebymail: 1.2.0 - socialsharing_email: 1.0.1 - socialsharing_googleplus: 1.0.1 - socialsharing_twitter: 1.0.1 - survey_client: 1.0.0 - systemtags: 1.2.0 - tasks: 0.9.5 - theming: 1.3.0 - twofactor_backupcodes: 1.1.1 - twofactor_totp: 1.3.1 - twofactor_u2f: 1.3.3 - updatenotification: 1.2.0 - weather: 1.5.0 - workflowengine: 1.2.0 Disabled: - encryption - files_inotify - user_external - user_ldap

Nextcloud configuration:

Config report '**REMOVED**', 'passwordsalt' => '**REMOVED**', 'secret' => '**REMOVED**', 'trusted_domains' => array ( 0 => 'ironcloud.monsterpit.net', 1 => 'localhost' ), 'trusted_proxies' => array ( 0 => '192.168.1.50', ), 'overwritehost' => 'ironcloud.monsterpit.net', 'overwriteprotocol' => 'https', 'overwritewebroot' => '/', 'overwritecondaddr' => '^192\\.168\\.1\\.50$', 'overwrite.cli.url' => 'https://ironcloud.monsterpit.net', 'htaccess.RewriteBase' => '/nextcloud/', 'dbtype' => 'pgsql', 'version' => '12.0.3.3', 'dbname' => 'nextcloud', 'dbhost' => 'localhost', 'dbtableprefix' => 'oc_', 'dbuser' => 'nextcloud', 'dbpassword' => '**REMOVED**', 'logtimezone' => 'America/Chicago', 'installed' => true, 'memcache.local' => '\\OC\\Memcache\\APCu', 'memcache.locking' => '\\OC\\Memcache\\Redis', 'redis' => array ( 'host' => '127.0.0.1', 'port' => 6379, 'dbindex' => 0, 'password' => '***REMOVED**', 'timeout' => 1.5, ), 'mail_domain' => 'ironclaw.monsterpit.net', 'mail_smtpmode' => 'smtp', 'mail_from_address' => 'notification', 'maintenance' => false, 'trashbin_retention_obligation' => 'auto, 60', 'enable_previews' => true, 'enabledPreviewProviders' => array ( 0 => 'OC\\Preview\\PNG', 1 => 'OC\\Preview\\JPEG', 2 => 'OC\\Preview\\GIF', 3 => 'OC\\Preview\\BMP', 4 => 'OC\\Preview\\XBitmap', 5 => 'OC\\Preview\\MP3', 6 => 'OC\\Preview\\TXT', 7 => 'OC\\Preview\\MarkDown', 8 => 'OC\\Preview\\SVG', 9 => 'OC\\Preview\\TIFF', 10 => 'OC\\Preview\\Movie', 11 => 'OC\\Preview\\PDF', 12 => 'OC\\Preview\\Postscript', ), 'mysql.utf8mb4' => true, 'filesystem_check_changes' => 0, 'mail_smtpsecure' => 'tls', 'mail_smtpauthtype' => 'LOGIN', 'mail_smtpauth' => 1, 'mail_smtphost' => '**REMOVED**', 'mail_smtpport' => '**REMOVED**', 'mail_smtpname' => '**REMOVED**', 'mail_smtppassword' => '**REMOVED**', 'theme' => '', 'loglevel' => 2, 'updater.release.channel' => 'stable', 'log_rotate_size' => 512000, );

Are you using external storage, if yes which one: Local, Google Drive

Are you using encryption: No

Are you using an external user-backend, if yes which one: No

Client configuration

Browser: Firefox 56.0

Operating system: Windows 10

Logs

Web server error log

Web server error log [Sat Sep 30 05:14:03.277801 2017] [:error] [pid 689] [client 192.168.1.50:60814] PHP Fatal error: Cannot declare interface OCP\\Files\\Notify\\INotifyHandler, because the name is already in use in /var/www/nextcloud/apps/files_inotify/appinfo/compat.php on line 23

Ability to configure inotify events

Hello,

In some cases with rsync and big files, listenning all this events seems to make hundreds calls to databases (I think, perhaps i'm wrong)...

$descriptor = inotify_add_watch($this->fd, $path,
			\IN_MODIFY + \IN_CREATE + \IN_MOVED_FROM + \IN_MOVED_TO + \IN_DELETE);

Logs

...
...
...
modified 2013/.BIG_FILE.cQkoKU     
  marking '2013' as outdated for LIST_OF_USERS
modified 2013/.BIG_FILE.mkv.cQkoKU     
  marking '2013' as outdated for LIST_OF_USERS
modified 2013/.BIG_FILE.mkv.cQkoKU     
  marking '2013' as outdated for LIST_OF_USERS
modified 2013/.BIG_FILE.cQkoKU     
  marking '2013' as outdated for LIST_OF_USERS
modified 2013/.BIG_FILE.cQkoKU     
  marking '2013' as outdated for LIST_OF_USERS
renamed 2013/.BIG_FILE.cQkoKU to 2013/BIG_FILE
  marking '2013' as outdated for LIST_OF_USERS
  marking '2013' as outdated for LIST_OF_USERS

For my case i want to choose events (or an other solution).

Could we have the ability to configure the events ?

Cannot apply inotify to local folder (localization issue?)

In my nextcloud installation, the output of occ commands seems to be localized (German). So "Local" external storage is displayed es "Lokal".

Trying to activate inotify causes the following error:

root@server:# sudo -u www-data php occ files_external:notify 1
Mount of type "Lokal" does not support active update notifications

Is this a localization problem?

How can I change the format of the output of changes in the directory?

Hi, I am a student. Is it possible to change the format of the output of changes in the local storage?
For example, add the date and time before the event that has occurred?
For example:
2021-10-15 10:00:10 removed /dir/file.txt
2021-10-15 10:05:10 create /dir/dir2

Is it possible to find out which user made the change?
For example:
2021-10-15 10:00:10 UserPC removed /dir/file.txt

[error] Mount of type "Local" does not support active update notifications

I have installed inotify inside a container with the image of linusserver/nextcloud.

It ran fine until recently. occ files_external:notify was loaded repeatly.

My set up:
The images of Linuxserver.io allows customization of additional software into the container by mounting a specify directory into the container. I put a file, install-INotify, into the directory custom-cont-init.dto install INotify. The content is:

#!/bin/bash

/sbin/apk update
/sbin/apk add --no-cache g++ make php82-dev php82-pear
/usr/bin/pear82 config-set php_ini '/etc/php82/php.ini'
/usr/bin/pecl82 channel-update pecl.php.net
/usr/bin/pecl82 install INotify
/bin/echo 'extension="inotify.so"' > '/etc/php82/conf.d/00_inotify.ini'

INSTALLED=`/usr/bin/occ app:list | grep files_inotify`
/usr/bin/[ -z "$INSTALLED" ] && /usr/bin/occ app:install files_inotify

The logs of the container:

$ docker logs -f nextcloud
[custom-init] Service files found in /custom-services.d
[custom-init] start-files_inotify: service detected, copying...
[custom-init] start-files_inotify: copied
[mod-init] Attempting to run Docker Modification Logic
[mod-init] Adding linuxserver/mods:universal-cron to container
[mod-init] Downloading linuxserver/mods:universal-cron from lscr.io
[mod-init] Installing linuxserver/mods:universal-cron
[mod-init] linuxserver/mods:universal-cron applied to container
[migrations] started
[migrations] 01-nginx-site-confs-default: skipped
[migrations] 02-default-location: skipped
[migrations] done
───────────────────────────────────────

      ██╗     ███████╗██╗ ██████╗ 
      ██║     ██╔════╝██║██╔═══██╗
      ██║     ███████╗██║██║   ██║
      ██║     ╚════██║██║██║   ██║
      ███████╗███████║██║╚██████╔╝
      ╚══════╝╚══════╝╚═╝ ╚═════╝ 

   Brought to you by linuxserver.io
───────────────────────────────────────

To support LSIO projects visit:
https://www.linuxserver.io/donate/

───────────────────────────────────────
GID/UID
───────────────────────────────────────

User UID:    1016
User GID:    1016
───────────────────────────────────────

using keys found in /config/keys
Initializing nextcloud 28.0.1.1 (this can take a while) ...
Setting permissions
Initializing finished
**** The following active confs have different version dates than the samples that are shipped. ****
**** This may be due to user customization or an update to the samples. ****
**** You should compare the following files to the samples in the same folder and update them. ****
**** Use the link at the top of the file to view the changelog. ****
┌────────────┬────────────┬────────────────────────────────────────────────────────────────────────┐
│  old date  │  new date  │ path                                                                   │
├────────────┼────────────┼────────────────────────────────────────────────────────────────────────┤
│ 2022-08-16 │ 2023-04-13 │ /config/nginx/nginx.conf                                               │
│ 2022-08-20 │ 2023-08-13 │ /config/nginx/ssl.conf                                                 │
└────────────┴────────────┴────────────────────────────────────────────────────────────────────────┘
**** The following site-confs have extensions other than .conf ****
**** This may be due to user customization. ****
**** You should review the files and rename them to use the .conf extension or remove them. ****
**** nginx.conf will only include site-confs with the .conf extension. ****
/config/nginx/site-confs/default.conf.2023-05-13
/config/nginx/site-confs/default.conf.2024-01-10
/config/nginx/site-confs/default.conf.ori.2024-01-10
[custom-init] Files found, executing
[custom-init] install-INotify: executing...
fetch http://dl-cdn.alpinelinux.org/alpine/v3.18/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.18/community/x86_64/APKINDEX.tar.gz
v3.18.5-109-ge7c511cfd7a [http://dl-cdn.alpinelinux.org/alpine/v3.18/main]
v3.18.5-106-g9132bc6d2aa [http://dl-cdn.alpinelinux.org/alpine/v3.18/community]
OK: 20074 distinct packages available
fetch http://dl-cdn.alpinelinux.org/alpine/v3.18/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.18/community/x86_64/APKINDEX.tar.gz
(1/29) Installing libstdc++-dev (12.2.1_git20220924-r10)
(2/29) Installing binutils (2.40-r7)
(3/29) Installing libatomic (12.2.1_git20220924-r10)
(4/29) Installing isl26 (0.26-r1)
(5/29) Installing mpfr4 (4.2.0_p12-r0)
(6/29) Installing mpc1 (1.3.1-r1)
(7/29) Installing gcc (12.2.1_git20220924-r10)
(8/29) Installing musl-dev (1.2.4-r2)
(9/29) Installing libc-dev (0.7.2-r5)
(10/29) Installing g++ (12.2.1_git20220924-r10)
(11/29) Installing make (4.4.1-r1)
(12/29) Installing m4 (1.4.19-r3)
(13/29) Installing perl (5.36.2-r0)
(14/29) Installing perl-error (0.17029-r1)
(15/29) Installing perl-git (2.40.1-r0)
(16/29) Installing git-perl (2.40.1-r0)
(17/29) Installing autoconf (2.71-r2)
(18/29) Installing bsd-compat-headers (0.7.2-r5)
(19/29) Installing libmenuw (6.4_p20230506-r0)
(20/29) Installing libncurses++ (6.4_p20230506-r0)
(21/29) Installing ncurses-dev (6.4_p20230506-r0)
(22/29) Installing libedit-dev (20221030.3.1-r1)
(23/29) Installing zlib-dev (1.2.13-r1)
(24/29) Installing libpcre2-16 (10.42-r1)
(25/29) Installing libpcre2-32 (10.42-r1)
(26/29) Installing pcre2-dev (10.42-r1)
(27/29) Installing re2c (3.0-r1)
(28/29) Installing php82-dev (8.2.13-r0)
(29/29) Installing php82-pear (8.2.13-r0)
Executing busybox-1.36.1-r5.trigger
OK: 587 MiB in 287 packages
config-set succeeded
Updating channel "pecl.php.net"
Update of Channel "pecl.php.net" succeeded
downloading inotify-3.0.0.tgz ...
Starting to download inotify-3.0.0.tgz (8,455 bytes)
.....done: 8,455 bytes
3 source files, building
running: phpize82
Configuring for:
PHP Api Version:         20220829
Zend Module Api No:      20220829
Zend Extension Api No:   420220829
config.m4:9: warning: The macro `AC_TRY_RUN' is obsolete.
config.m4:9: You should run autoupdate.
./lib/autoconf/general.m4:2997: AC_TRY_RUN is expanded from...
config.m4:9: the top level
building in /tmp/pear/temp/pear-build-defaultuserOHEdPO/inotify-3.0.0
running: /tmp/pear/temp/inotify/configure --with-php-config=/usr/bin/php-config82
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for a sed that does not truncate output... /bin/sed
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for cc... cc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether the compiler supports GNU C... yes
checking whether cc accepts -g... yes
checking for cc option to enable C11 features... none needed
checking how to run the C preprocessor... cc -E
checking for icc... no
checking for suncc... no
checking for system library directory... lib
checking if compiler supports -Wl,-rpath,... yes
checking build system type... x86_64-pc-linux-musl
checking host system type... x86_64-pc-linux-musl
checking target system type... x86_64-pc-linux-musl
checking for PHP prefix... /usr
checking for PHP includes... -I/usr/include/php82 -I/usr/include/php82/main -I/usr/include/php82/TSRM -I/usr/include/php82/Zend -I/usr/include/php82/ext -I/usr/include/php82/ext/date/lib
checking for PHP extension directory... /usr/lib/php82/modules
checking for PHP installed headers prefix... /usr/include/php82
checking if debug is enabled... no
checking if zts is enabled... no
checking for gawk... no
checking for nawk... no
checking for awk... awk
checking if awk is broken... no
checking whether to enable inotify support... yes, shared
checking for a sed that does not truncate output... /bin/sed
checking for ld used by cc... /usr/x86_64-alpine-linux-musl/bin/ld
checking if the linker (/usr/x86_64-alpine-linux-musl/bin/ld) is GNU ld... yes
checking for /usr/x86_64-alpine-linux-musl/bin/ld option to reload object files... -r
checking for BSD-compatible nm... /usr/bin/nm -B
checking whether ln -s works... yes
checking how to recognize dependent libraries... pass_all
/tmp/pear/temp/inotify/configure: line 5377: /usr/bin/file: not found
checking for stdio.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for strings.h... yes
checking for sys/stat.h... yes
checking for sys/types.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking the maximum length of command line arguments... 98304
checking command to parse /usr/bin/nm -B output from cc object... ok
checking for objdir... .libs
checking for ar... ar
checking for ranlib... ranlib
checking for strip... strip
checking if cc supports -fno-rtti -fno-exceptions... no
checking for cc option to produce PIC... -fPIC
checking if cc PIC flag -fPIC works... yes
checking if cc static flag -static works... yes
checking if cc supports -c -o file.o... yes
checking whether the cc linker (/usr/x86_64-alpine-linux-musl/bin/ld) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... no

creating libtool
appending configuration tag "CXX" to libtool
configure: patching config.h.in
configure: creating ./config.status
config.status: creating config.h
running: make
/bin/sh /tmp/pear/temp/pear-build-defaultuserOHEdPO/inotify-3.0.0/libtool --mode=compile cc -I. -I/tmp/pear/temp/inotify -I/tmp/pear/temp/pear-build-defaultuserOHEdPO/inotify-3.0.0/include -I/tmp/pear/temp/pear-build-defaultuserOHEdPO/inotify-3.0.0/main -I/tmp/pear/temp/inotify -I/usr/include/php82 -I/usr/include/php82/main -I/usr/include/php82/TSRM -I/usr/include/php82/Zend -I/usr/include/php82/ext -I/usr/include/php82/ext/date/lib  -DHAVE_CONFIG_H  -g -O2 -D_GNU_SOURCE    -DZEND_COMPILE_DL_EXT=1 -c /tmp/pear/temp/inotify/inotify.c -o inotify.lo  -MMD -MF inotify.dep -MT inotify.lo
mkdir .libs
 cc -I. -I/tmp/pear/temp/inotify -I/tmp/pear/temp/pear-build-defaultuserOHEdPO/inotify-3.0.0/include -I/tmp/pear/temp/pear-build-defaultuserOHEdPO/inotify-3.0.0/main -I/tmp/pear/temp/inotify -I/usr/include/php82 -I/usr/include/php82/main -I/usr/include/php82/TSRM -I/usr/include/php82/Zend -I/usr/include/php82/ext -I/usr/include/php82/ext/date/lib -DHAVE_CONFIG_H -g -O2 -D_GNU_SOURCE -DZEND_COMPILE_DL_EXT=1 -c /tmp/pear/temp/inotify/inotify.c -MMD -MF inotify.dep -MT inotify.lo  -fPIC -DPIC -o .libs/inotify.o
/bin/sh /tmp/pear/temp/pear-build-defaultuserOHEdPO/inotify-3.0.0/libtool --mode=link cc -shared -I/tmp/pear/temp/pear-build-defaultuserOHEdPO/inotify-3.0.0/include -I/tmp/pear/temp/pear-build-defaultuserOHEdPO/inotify-3.0.0/main -I/tmp/pear/temp/inotify -I/usr/include/php82 -I/usr/include/php82/main -I/usr/include/php82/TSRM -I/usr/include/php82/Zend -I/usr/include/php82/ext -I/usr/include/php82/ext/date/lib  -DHAVE_CONFIG_H  -g -O2 -D_GNU_SOURCE    -o inotify.la -export-dynamic -avoid-version -prefer-pic -module -rpath /tmp/pear/temp/pear-build-defaultuserOHEdPO/inotify-3.0.0/modules  inotify.lo
cc -shared  .libs/inotify.o   -Wl,-soname -Wl,inotify.so -o .libs/inotify.so
creating inotify.la
(cd .libs && rm -f inotify.la && ln -s ../inotify.la inotify.la)
/bin/sh /tmp/pear/temp/pear-build-defaultuserOHEdPO/inotify-3.0.0/libtool --mode=install cp ./inotify.la /tmp/pear/temp/pear-build-defaultuserOHEdPO/inotify-3.0.0/modules
cp ./.libs/inotify.so /tmp/pear/temp/pear-build-defaultuserOHEdPO/inotify-3.0.0/modules/inotify.so
cp ./.libs/inotify.lai /tmp/pear/temp/pear-build-defaultuserOHEdPO/inotify-3.0.0/modules/inotify.la
PATH="$PATH:/sbin" ldconfig -n /tmp/pear/temp/pear-build-defaultuserOHEdPO/inotify-3.0.0/modules
----------------------------------------------------------------------
Libraries have been installed in:
   /tmp/pear/temp/pear-build-defaultuserOHEdPO/inotify-3.0.0/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,--rpath -Wl,LIBDIR' linker flag

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------

Build complete.
Don't forget to run 'make test'.

running: make INSTALL_ROOT="/tmp/pear/temp/pear-build-defaultuserOHEdPO/install-inotify-3.0.0" install
Installing shared extensions:     /tmp/pear/temp/pear-build-defaultuserOHEdPO/install-inotify-3.0.0/usr/lib/php82/modules/
running: find "/tmp/pear/temp/pear-build-defaultuserOHEdPO/install-inotify-3.0.0" | xargs ls -dils
23626301  0 drwxr-xr-x 1 root root     6 Jan 12 22:02 /tmp/pear/temp/pear-build-defaultuserOHEdPO/install-inotify-3.0.0
23626541  0 drwxr-xr-x 1 root root     6 Jan 12 22:02 /tmp/pear/temp/pear-build-defaultuserOHEdPO/install-inotify-3.0.0/usr
23626542  0 drwxr-xr-x 1 root root    10 Jan 12 22:02 /tmp/pear/temp/pear-build-defaultuserOHEdPO/install-inotify-3.0.0/usr/lib
23626543  0 drwxr-xr-x 1 root root    14 Jan 12 22:02 /tmp/pear/temp/pear-build-defaultuserOHEdPO/install-inotify-3.0.0/usr/lib/php82
23626544  0 drwxr-xr-x 1 root root    20 Jan 12 22:02 /tmp/pear/temp/pear-build-defaultuserOHEdPO/install-inotify-3.0.0/usr/lib/php82/modules
23626545 52 -rwxr-xr-x 1 root root 52440 Jan 12 22:02 /tmp/pear/temp/pear-build-defaultuserOHEdPO/install-inotify-3.0.0/usr/lib/php82/modules/inotify.so

Build process completed successfully
Installing '/usr/lib/php82/modules/inotify.so'
install ok: channel://pecl.php.net/inotify-3.0.0
Extension inotify enabled in php.ini
PHP Warning:  Module "inotify" is already loaded in Unknown on line 0
[custom-init] install-INotify: exited 1
[ls.io-init] done.
[12-Jan-2024 22:02:26] NOTICE: PHP message: PHP Warning:  Module "inotify" is already loaded in Unknown on line 0
PHP Warning:  Module "inotify" is already loaded in Unknown on line 0

And I put the a file, start-files_inotify, into the directory custom-services.d to launch files_inotify. The content of the file is as the following:

#!/bin/bash

D=`date +%Y.%m.%d`
{
T=`date +%Y.%m.%d-%H.%M.%S`
/bin/echo $T
/bin/echo "**** custom-services.d ****"
/bin/echo "Starting notify..."
occ files_external:notify -vvv 15 2>&1
	
# the following lin is not expected to be seen on log.
/bin/echo "completed notify."

} >> "/mnt/logs/notify/notify-${D}.log"

The content of the notify-yyyy.mm.dd-HH.MM.SS.log is:

2024.01.12-22.02.26
**** custom-services.d ****
Starting notify...
PHP Warning:  Module "inotify" is already loaded in Unknown on line 0
Mount of type "Local" does not support active update notifications
completed notify.
2024.01.12-22.02.27
**** custom-services.d ****
Starting notify...
PHP Warning:  Module "inotify" is already loaded in Unknown on line 0
Mount of type "Local" does not support active update notifications
completed notify.
2024.01.12-22.02.29
**** custom-services.d ****
Starting notify...
PHP Warning:  Module "inotify" is already loaded in Unknown on line 0
Mount of type "Local" does not support active update notifications
completed notify.
2024.01.12-22.02.30
**** custom-services.d ****
Starting notify...
PHP Warning:  Module "inotify" is already loaded in Unknown on line 0
Mount of type "Local" does not support active update notifications
completed notify.
2024.01.12-22.02.31
**** custom-services.d ****
Starting notify...
PHP Warning:  Module "inotify" is already loaded in Unknown on line 0
Mount of type "Local" does not support active update notifications
completed notify.
2024.01.12-22.02.33
**** custom-services.d ****
Starting notify...
PHP Warning:  Module "inotify" is already loaded in Unknown on line 0
Mount of type "Local" does not support active update notifications
completed notify.

on and on...

What should I do to fix it? Thanks in advance.

Missing dependency with latest version of Nextcloud?

I see this error when updating and was wondering what I can do about it?

App "INotify file watcher" cannot be installed because the following dependencies are not fulfilled: The library inotify is not available.

How do I install the missing library?

Don't fail on directories without read/access permission

I am sharing a local directory as external storage in Nextcloud. However, not all subdirectories of it have read/access permission for the www-data/apache user. This leads to the following error, after which files_inotify halts:

$ sudo -u www-data php /var/www/nextcloud/occ files_external:notify -v 1

In NotifyHandler.php line 63:
                                                                                                                                          
  [UnexpectedValueException]                                                                                                              
  RecursiveDirectoryIterator::__construct(/local/path/used/as/external_storage/subdir_without_rx_permissions): Failed to open directory: Permission denied                                                                                                                             
                                                                                                                                          

Exception trace:
  at /var/www/nextcloud/apps/files_inotify/lib/Storage/NotifyHandler.php:63
 RecursiveDirectoryIterator->__construct() at n/a:n/a
 RecursiveDirectoryIterator->getChildren() at /var/www/nextcloud/apps/files_inotify/lib/Storage/NotifyHandler.php:63
 OCA\Files_INotify\Storage\NotifyHandler->register() at /var/www/nextcloud/apps/files_inotify/lib/Storage/NotifyHandler.php:49
 OCA\Files_INotify\Storage\NotifyHandler->__construct() at /var/www/nextcloud/apps/files_inotify/lib/Storage/INotifyWrapper.php:41
 OCA\Files_INotify\Storage\INotifyWrapper->notify() at /var/www/nextcloud/apps/files_external/lib/Command/Notify.php:194
 OCA\Files_External\Command\Notify->execute() at /var/www/nextcloud/apps/recognize/vendor/symfony/console/Command/Command.php:298
 Symfony\Component\Console\Command\Command->run() at /var/www/nextcloud/core/Command/Base.php:177
 OC\Core\Command\Base->run() at /var/www/nextcloud/apps/recognize/vendor/symfony/console/Application.php:1040
 Symfony\Component\Console\Application->doRunCommand() at /var/www/nextcloud/apps/recognize/vendor/symfony/console/Application.php:301
 Symfony\Component\Console\Application->doRun() at /var/www/nextcloud/apps/recognize/vendor/symfony/console/Application.php:171
 Symfony\Component\Console\Application->run() at /var/www/nextcloud/lib/private/Console/Application.php:213
 OC\Console\Application->run() at /var/www/nextcloud/console.php:100
 require_once() at /var/www/nextcloud/occ:11

files_external:notify [-u|--user USER] [-p|--password PASSWORD] [--path PATH] [--no-self-check] [--dry-run] [--output [OUTPUT]] [--] <mount_id>

Would it be possible to ignore (or just log) directories for which the Apache user doesn't have rx permissions?

Possibly related to nextcloud/server#29514.

Update for Nextcloud 19

Hi,
your app is marked as untested in the NC19 app store. Can you update to NC19, please?
Thanks a lot!

Systemd unit file

I have been struggling literally for years with the Nextcloud client not recognizing changes in external storage. The first and only useful information about a working solution I found in the Nextcloud forum but it is lacking a systemd unit file for non-Docker set-ups. I have cobbled one together that I want to share. It is functional in Nextcloud 24 on Ubuntu 20.04. This is my first try at such a thing and comments as well as suggestions are welcome. I include the full source code here in order to facilitate the discussion.

The start script launches files_external:notify for each mount ID present. It does not change fs.inotify.max_user_watches which might be necessary if the total number of folders being watched is greater than 8192. That could be scripted as well but I do not have need for it now. A manual work-around is to set that value in /etc/sysctl.conf.

/etc/systemd/system/nextcloud-files-inotify.service (-rw-r--r-- 1 root root)

[Unit]
Description=Files-inotify launcher for local external storage one Nextcloud
After=network.target mysql.service
Requires=mysql.service
[Service]
Type=forking
User=www-data
Group=www-data
WorkingDirectory=/var/www/nextcloud
ExecStart=/usr/local/bin/nextcloud-files-external-notify.start
ExecStop=/usr/local/bin/nextcloud-files-external-notify.stop
Nice=19
Restart=always
[Install]
WantedBy=multi-user.target

/usr/local/bin/nextcloud-files-external-notify.start (-rwxr--r-- 1 www-data www-data)

for i in $(/usr/bin/php /var/www/nextcloud/occ files_external:list --output=json | jq '.[].mount_id')
do
        /usr/bin/php /var/www/nextcloud/occ files_external:notify -n $i &  
done

/usr/local/bin/nextcloud-files-external-notify.stop (-rwxr--r-- 1 www-data www-data)

pkill -f '/usr/bin/php /var/www/nextcloud/occ files_external:notify -n [0-9]+'

If files external is not activated inotify throws an error 500 and breaks nextcloud

Using nextcloud 15.0.5 and installed files_inotify 0.1.3 on debian 9.

Steps to reproduce:

  1. deactivate external storage support
  2. install inotify file watcher
  3. get an error 500

What i would expect

  1. deactivate external storage support
  2. install inotify file watcher
  3. get an error message that it could not be activated since external storage support is deactivated

From the nginx error log:

2019/03/14 13:12:21 [error] 906#906: *69459 FastCGI sent in stderr: "PHP message: PHP Fatal error: Interface 'OCA\Files_External\Lib\Config\IBackendProvider' not found in /var/www/nextcloud/apps/files_inotify/lib/AppInfo/Application.php on line 29" while reading response header from upstream, client: X.X.X.X, server: cloud.adomain.test, request: "GET /apps/files/ HTTP/2.0", upstream: "fastcgi://unix:/run/php/php7.2-fpm.sock:", host: "cloud.adomain.test"

Could not boot files_inotify: Could not resolve dispatcher! Class "dispatcher" does not exist

On my Nextcloud box (28.0.1.1), the log has started to have lots and lots of entries complaining that file_inotify cannot be loaded:

[no app in context] Fehler: Could not boot files_inotify: Could not resolve dispatcher! Class "dispatcher" does not exist

Raw:

{
  "reqId": "PCuC89hd4EkBS6CZLIaz",
  "level": 3,
  "time": "2024-01-20T15:21:43+00:00",
  "remoteAddr": "###.###.###.###",
  "user": "#####",
  "app": "no app in context",
  "method": "GET",
  "url": "/apps/logreader/api/poll?lastReqId=Uk206KaOggE8uWvAS2wf",
  "message": "Could not boot files_inotify: Could not resolve dispatcher! Class \"dispatcher\" does not exist",
  "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
  "version": "28.0.1.1",
  "exception": {
    "Exception": "OC\\AppFramework\\Utility\\QueryNotFoundException",
    "Message": "Could not resolve dispatcher! Class \"dispatcher\" does not exist",
    "Code": 0,
    "Trace": [
      {
        "file": "/var/www/html/lib/private/AppFramework/Utility/SimpleContainer.php",
        "line": 146,
        "function": "resolve",
        "class": "OC\\AppFramework\\Utility\\SimpleContainer",
        "type": "->",
        "args": [
          "dispatcher"
        ]
      },
      {
        "file": "/var/www/html/lib/private/ServerContainer.php",
        "line": 173,
        "function": "query",
        "class": "OC\\AppFramework\\Utility\\SimpleContainer",
        "type": "->",
        "args": [
          "dispatcher",
          true
        ]
      },
      {
        "file": "/var/www/html/lib/private/AppFramework/DependencyInjection/DIContainer.php",
        "line": 443,
        "function": "query",
        "class": "OC\\ServerContainer",
        "type": "->",
        "args": [
          "dispatcher",
          true
        ]
      },
      {
        "file": "/var/www/html/lib/private/AppFramework/Utility/SimpleContainer.php",
        "line": 64,
        "function": "query",
        "class": "OC\\AppFramework\\DependencyInjection\\DIContainer",
        "type": "->",
        "args": [
          "dispatcher"
        ]
      },
      {
        "file": "/var/www/html/lib/private/AppFramework/Bootstrap/FunctionInjector.php",
        "line": 56,
        "function": "get",
        "class": "OC\\AppFramework\\Utility\\SimpleContainer",
        "type": "->",
        "args": [
          "dispatcher"
        ]
      },
      {
        "function": "OC\\AppFramework\\Bootstrap\\{closure}",
        "class": "OC\\AppFramework\\Bootstrap\\FunctionInjector",
        "type": "->",
        "args": [
          "*** sensitive parameters replaced ***"
        ]
      },
      {
        "file": "/var/www/html/lib/private/AppFramework/Bootstrap/FunctionInjector.php",
        "line": 45,
        "function": "array_map",
        "args": [
          [
            "Closure"
          ],
          [
            [
              "ReflectionParameter",
              "appContainer"
            ],
            "*** sensitive parameters replaced ***"
          ]
        ]
      },
      {
        "file": "/var/www/html/lib/private/AppFramework/Bootstrap/BootContext.php",
        "line": 50,
        "function": "injectFn",
        "class": "OC\\AppFramework\\Bootstrap\\FunctionInjector",
        "type": "->",
        "args": [
          [
            [
              "OCA\\Files_INotify\\AppInfo\\Application"
            ],
            "registerBackendDependents"
          ]
        ]
      },
      {
        "file": "/var/www/html/custom_apps/files_inotify/lib/AppInfo/Application.php",
        "line": 42,
        "function": "injectFn",
        "class": "OC\\AppFramework\\Bootstrap\\BootContext",
        "type": "->",
        "args": [
          [
            [
              "OCA\\Files_INotify\\AppInfo\\Application"
            ],
            "registerBackendDependents"
          ]
        ]
      },
      {
        "file": "/var/www/html/lib/private/AppFramework/Bootstrap/Coordinator.php",
        "line": 200,
        "function": "boot",
        "class": "OCA\\Files_INotify\\AppInfo\\Application",
        "type": "->",
        "args": [
          [
            "OC\\AppFramework\\Bootstrap\\BootContext"
          ]
        ]
      },
      {
        "file": "/var/www/html/lib/private/App/AppManager.php",
        "line": 434,
        "function": "bootApp",
        "class": "OC\\AppFramework\\Bootstrap\\Coordinator",
        "type": "->",
        "args": [
          "files_inotify"
        ]
      },
      {
        "file": "/var/www/html/lib/private/App/AppManager.php",
        "line": 213,
        "function": "loadApp",
        "class": "OC\\App\\AppManager",
        "type": "->",
        "args": [
          "files_inotify"
        ]
      },
      {
        "file": "/var/www/html/lib/private/legacy/OC_App.php",
        "line": 125,
        "function": "loadApps",
        "class": "OC\\App\\AppManager",
        "type": "->",
        "args": [
          []
        ]
      },
      {
        "file": "/var/www/html/lib/base.php",
        "line": 1049,
        "function": "loadApps",
        "class": "OC_App",
        "type": "::",
        "args": []
      },
      {
        "file": "/var/www/html/index.php",
        "line": 39,
        "function": "handleRequest",
        "class": "OC",
        "type": "::",
        "args": []
      }
    ],
    "File": "/var/www/html/lib/private/AppFramework/Utility/SimpleContainer.php",
    "Line": 135,
    "message": "Could not boot files_inotify: Could not resolve dispatcher! Class \"dispatcher\" does not exist",
    "exception": [],
    "CustomMessage": "Could not boot files_inotify: Could not resolve dispatcher! Class \"dispatcher\" does not exist"
  },
  "id": "65abe507acd77"
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.