Мне нужно отслеживать определенную структуру каталогов для изменений (фактически только для добавления новых файлов), и при каждом изменении вызывать скрипт php, который обрабатывает изменение (фактически берет новый файл и делает с ним дополнительные действия). То, что я достиг до сих пор, заключается в том, что у меня есть крошечный PHP-файл, который принимает параметры и обрабатывает действия, и я также установил запуск inotifywait, который отслеживает структуру каталогов, в которой я нуждаюсь.
Trigger:
inotifywait -e MOVED_TO /var/data/nextcloud/data/ --recursive --monitor
Обработчик:
$file = __DIR__.'/filechanges.txt';
// Open the file to get existing content
$current = file_get_contents($file);
// Append a new file to the file
$current .= print_r($argv, true);
// Write the contents back to the file
file_put_contents($file, $current);
Как связать их вместе, зная, что обработка PHP-скрипта может занять некоторое время, и я не хочу блокировать скрипт мониторинга все это время?
Насколько я знаю, я мог бы использовать pipe и отправить inotifywait в PHP stdin и захватить его как
$line = fgets(STDIN);
, но я понимаю, что в таком случае все inotifywait будут ждать окончания фина PHP скрипт.
1) Могу ли я как-то отправить вывод inotifywait в качестве параметров сценария PHP в командной строке, а затем захватить его с помощью $ argv (что предположительно? 2) Могу ли я создать отдельный экземпляр PHP с помощью stdin в качестве источника, так что будет продолжать inotifywait смотреть (не блокировать его дальнейшее выполнение)?