【发布时间】:2013-08-16 19:58:34
【问题描述】:
我已经从 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 为空。
我的根目录是:
/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我想好了,我会试试的!
编辑: 文档表明 incron 从系统表运行或 root 从其主机环境中获取 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) -是的,我确保我的脚本是可执行的..
所以 incrond 确实在尝试做某事,但我在任何地方都没有输出...即使是简单的 echo > /dev/pts/0 也会产生 nada 结果。
- 感谢您修复我的垃圾格式化作业
【问题讨论】:
-
谢谢,我有一个不同的问题,但我通过这样做找到了它:
tail -f /var/log/cron | grep --line-buffered incron并注意到每个命令执行两次,但这是另一个问题.. :)
标签: bash inotify centos6 selinux