8

我已经从 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 incronyum install incronchkconfig 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 结果。

  • 感谢您修复我的垃圾格式化工作
4

1 回答 1

9

好的,这是答案:

尽管我可以找到所有文档声明它是相反的,但incrond在 CentOS 6.4 下运行在稀疏环境中并且表现为cron. 在 Ubuntu 下情况并非如此,其中 incron 从 root 继承了系统表和根表的环境,并且只有用户表在稀疏环境中运行。这当然意味着如果您正在调用一个脚本(我是),该脚本需要构建它的环境,并且每件事都必须有一个完整的路径。一切。(好吧,除了shell内置:p)

许多谷歌和必应、堆栈溢出和服务器故障搜索都告诉我以cron这种方式运行,但它们似乎也都表明incron按照文档中描述的方式运行,它在 Ubuntu 下确实如此......

最重要的是,它现在可以工作了,耶!

  • 我想这只是为了表明:当有疑问时定义环境并使用完整路径......呃,实际上,只要一直这样做,就不会让自己头疼。

(这并没有解决我为 应用 SELinux 安全策略的问题incron,但我稍后会担心,在另一篇文章中......)

于 2013-08-16T15:26:44.847 回答