我已经从EPEL仓库安装了incron(如果您问的话;是的,我也尝试过下载源代码并在本地编译;结果相同),并试图在我的CentOS 6.4(最终版本)虚拟机上设置一个进程,该进程在我的本地Ubunto 12.04机器上已成功进行了原型设计:
首先提供一些信息:
- SELinux设置为PERMISSIVE
- 我已经通过
visudo
将我的脚本和可执行文件全部添加到NOPASSWD中,以解决某些权限问题...
如果我使用sudo /path/to/my/script.sh arguments
从命令行调用我的脚本,它就像魅力一样工作。
sudo service incrond status
验证incrond正在运行。 root和myusername已被添加到/etc/incron.allow
,/etc/incron.deny
为空。
我的root用户的incrotab如下:
/path/to/dropfolder/ IN_CLOSE_WRITE sudo /path/to/my/script.sh $@/$#
/path/to/dropfolder/
文件夹中的事件不会产生任何作用,也不会生成日志、信息或对文件执行任何操作。
因此,我进行了研究:建议在最小环境下运行,并且要执行复杂的命令/脚本,您可能需要执行<.bashrc>和/或在cron命令开始时导出您的路径。
注意:我找不到支持incron
也运行在最小环境中的文档,但是由于我的搜索结果与incron
直接相关的任何有用结果都无法得到帮助,所以我想尝试一下!
编辑:文档表明从系统表或根目录运行的incron
使用其主机环境的env,因此只有非root用户执行的incron
需要任何类型的env或PATH调整
因此… incrontab for root:
/path/to/dropfolder IN_CLOSE_WRITE . /home/myusername/.bashrc; export PATH=$PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin; sudo /path/to/my/script.sh $@/$#"
没有用…尝试使用&&
代替;
= 没有用。如果你能想到以上方案的变化,我可能已经尝试过了…
所以,让我们尝试一下restorecond -R /usr/sbin/incrond /etc/incron*
!哎呀,还是没有改变。
service incrond stop
后跟service incrond start
,然后是service incrond restart
…不行,不行,还是不行。
极端措施:yum remove incron
和yum install incron
,chkconfig incrond on
,最后再来一次sudo reboot
!
没有任何进展。
甚至/tmp/ IN_ALL_EVENTS echo boo>>/home/myusername/boofile.txt
也没有输出, 因此我无法进行env>>envfile.txt
操作以检查incron
是否在稀疏环境中运行…(见上面的注释)。
但是:service incrond status
显示incrond (pid xxxx) is running...
我错过了什么吗?这必须是很大而明显的问题,我希望有人能很快地让我感觉像个白痴!
进一步检查/var/log/cron
会产生如下结果:Aug 14 15:05:30 hostname incrond[1584]: (root) CMD (sudo /path/to/DropFolder/script/subfolder/script-Beta-1.sh /home/username/DropFolder/testfile.file)
-是的,我确保我的脚本可执行…
因此,incron确实尝试做某些事情,但我在任何地方都没有输出…即使是简单的echo >/dev/pts/0
也没有任何结果。
- 感谢您修改我的格式错误
tail -f /var/log/cron | grep --line-buffered incron
,我注意到每个命令都被执行了两次,但这是另一个问题.. :) - Niclas