我已经在 Ubuntu 服务器 16.04 上安装并配置了 incron。现在我想监视文件是否添加到特定文件夹。这很有效,因为当我有
incrontab -l
/var/www/html/uploads IN_ATTRIB touch /home/incronuser/test.txt
当文件添加到上传文件夹时,会在用户主目录中创建 test.txt 文件。
此外,如果我回显某些内容而不是进行触摸,在这两种情况下,我都会看到incron
中的活动/var/log/syslog
。这样一切都按预期进行。
但是现在我想在文件添加到 uploads 文件夹时运行一个 bash 脚本。当创建 incron 作业的同一用户执行以下操作时,此脚本可以正常工作:
~$ bash /home/incronuser/myscript.sh
它运行良好并且脚本执行了它应该做的事情。
现在我改变我的 incron 作业以在触发时运行该脚本:
incrontab -e
/var/www/html/uploads IN_ATTRIB /home/incronuser/myscript.sh
但我无论如何都无法让它发挥作用。根据这里和互联网上其他问答,我尝试过以各种形式使用引号,尝试过在行中使用 bash 命令,crontab
但到目前为止都失败了。例如:
/var/www/html/uploads IN_ATTRIB bash /home/incronuser/myscript.sh
/var/www/html/uploads IN_ATTRIB /bin/bash /home/incronuser/myscript.sh
"/var/www/html/uploads IN_ATTRIB /home/incronuser/myscript.sh"
/var/www/html/uploads IN_ATTRIB "/home/incronuser/myscript.sh"
/var/www/html/uploads IN_ATTRIB sudo bash -c "/home/incronuser/myscript.sh"
我必须补充一点,在所有这些情况下,我确实看到了incron
工作被调用syslog
,只是什么也没发生。我不太确定在哪里可以找到更详细的日志来了解出了什么问题。如果能对此有所了解就太好了。
答案1
好吧,我已经搞清楚了。我只会在这里留下我的解决方案,以便其他遇到此问题的人(incron 的文档记录不如 cron 好,而且存在根本区别)。
我犯的第一个错误是我构建 incrontab 的方式。这应该是:
/var/www/html/uploads IN_ATTRIB /bin/bash /home/incronuser/myscript.sh
其次,我没有以正确的用户身份执行它。首先需要将需要插入数据库的文件移动到 /var/lib/mysql-files,并且只有 root 才能访问那里。因此,incron 作业也必须以 root 身份创建。