运行 crontab 在Linux 目录下新建文件时

Run Crontab in Linux when a new file created in a directory

我在 ubuntu 16.04 中设置了一个 crontab,通过 PHP 脚本从 /var/www/html/import/IMPORT-DATA.CSV 获取数据。

*/5 * * * * php /var/www/html/cron/import-csv.php

它工作正常,在获取数据后,我的 PHP 脚本将删除文件 (/var/www/html/import/IMPORT-DATA.CSV)。

我想在 Linux 中设置一个脚本(crontab 或其他),如果 IMPORT-DATA.CSV 文件上传到 运行 我的 PHP script 一次目录 /var/www/html/import/

一种分配任务的方法是使用 3 个不同的脚本并将它们链接到 cron 中。

*/5 * * * * php /var/www/html/cron/import-csv.php && /var/www/html/cron/YOUR_PERFORM_SOME_OTHER_TASK_PHP_SCRIPT && /var/www/html/cron/YOUR_DELETE-CSV-SCRIPT.php

&& 将确保下一个脚本仅在前一个脚本运行时运行 运行成功。

有几种方法我可以立即想到:

  1. 查明您的 FTP 服务器是否可以配置为为您触发脚本。 (例如pureftpd的upload-script功能 https://linux.die.net/man/8/pure-uploadscript ,并不是所有的FTP服务端软件都能做到。)
  2. 可能使用 inotify-tools. 设置一个 inotify 观察器(您也可以使用 PHP 创建自己的观察器 (inotify extension),但这可能会抵消任何性能提升因为你会经常有一个 PHP 的实例 运行。)

还有第三种选择: 如果您只是想避免调用 PHP 只是为了查看文件不存在 - 您可以在调用 PHP 脚本之前链接到 bash 文件测试。 cron 调用仍然每 5 分钟运行一次,但仅在文件存在时才调用 PHP。 (请注意,我还没有完全测试过这个,但很有信心它会起作用。)

SHELL=/bin/bash
*/5 * * * * test -e /var/www/html/import/IMPORT-DATA.CSV && php /var/www/html/cron/import-csv.php