在CentOS 6.4下运行但不执行命令

时间:2013-08-14 18:01:11

标签: bash inotify centos6 selinux

我已经从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/中的事件导致完全没有发生。没有生成日志,没有消息,文件夹中的文件也没有动作。

所以我研究过:有人建议cron在最小的环境中运行,并且为了执行复杂的命令/脚本,您可能必须执行.bashrc和/或在开始时导出PATH的命令。

注意:我找不到支持incron也在最小环境中运行的文档,但是因为我的google-fu(和bing-fu!)无法提供任何帮助结果与incron直接相关我想到了WTH,我会试试!

编辑:文档表明从系统表或root运行的incron从其主机环境获取env,因此非root用户只执行incron应该需要任何排序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,然后以sudo reboot为准!

没有

我甚至没有从/tmp/ IN_ALL_EVENTS echo boo>>/home/myusername/boofile.txt获得任何内容,因此我甚至无法检查env>>envfile.txt是否在稀疏环境中运行{(1}} ...(参见上面的注释)< / p>

然而:incron会产生service incrond status

我错过了什么?它必须是大而明显的,我希望有人可以让我觉得自己像一个短暂的白痴!

进一步检查incrond (pid xxxx) is running...会产生如下结果:/var/log/cron - 我确保我的脚本可执行..

所以incrond确实试图做SOMETHING,但我在任何地方都没有输出......即使是简单的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)也会产生nada结果。

  • 感谢您修复我的废话格式化工作

1 个答案:

答案 0 :(得分:8)

好的,这是答案:

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

众多Google和Bing以及Stack Overflow和Server Fault搜索都告诉我cron以这种方式运行,但它们似乎也表明incron按照文档中的说明运行,在Ubuntu下......

最重要的是,它现在有效,耶!

  • 我想这只是表明:如果有疑问定义环境并使用完整路径......呃,实际上,只是这样做,让自己头疼。

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