我已经从 EPEL 存储库安装了 incron(在你问之前;是的,我也尝试下载源代码并在本地编译;相同的结果)并试图在我成功原型化的 CentOS 6.4(最终)虚拟机上设置一个进程在我本地的 Ubunto 12.04 机器上:
前面的一些信息:
- SELinux 设置为 PERMISSIVE
- 我已经添加了我的脚本并使用 NOPASSWD 向所有人调用了可执行文件,
visudo
以解决一些权限问题......
如果我从命令行调用我的脚本,sudo /path/to/my/script.sh arguments
它就像一个魅力。
sudo service incrond status
验证 incrond 是否正在运行。root 和 myusername 添加到/etc/incron.allow
,/etc/incron.deny
为空。
我的根目录是:
/path/to/dropfolder/ IN_CLOSE_WRITE sudo /path/to/my/script.sh $@/$#
事件的/path/to/dropfolder/
结果是什么都没有发生。不会生成日志,没有消息,也不会对文件夹中的文件执行任何操作。
所以我进行了研究:建议cron
在最小环境中运行,并且要执行复杂的命令/脚本,您可能必须.bashrc
在 cron 命令的开头执行和/或导出 PATH。
注意:我找不到支持incron
在最小环境中运行的文档,但是由于我的 google-fu(和 bing-fu!)未能产生任何与incron
我认为 WTH 直接相关的有用结果,我会尝试一下!
编辑:文档表明incron
从系统表运行或 root 从其主机环境中获取 env,因此仅incron
由非 root 用户执行应该需要任何类型的 env 或 PATH 摆弄
所以...... root 的 incrontab:
/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
然后为良好的措施 a 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)
,我确保我的脚本是可执行的..
所以 incrond 确实在尝试做某事,但我在任何地方都没有输出......即使是简单的也会echo > /dev/pts/0
产生 nada 结果。
- 感谢您修复我的垃圾格式化工作