当 incrond 作为服务运行时,用户的 incrontab 不起作用(仅 root 的)

当 incrond 作为服务运行时,用户的 incrontab 不起作用(仅 root 的)

这是我的 incrontab (托尼的 incrontab):

/home/tony/Workspace/cocoonr/ui/static/ui/img/icons/vector IN_MODIFY,IN_CREATE,IN_MOVED_TO /bin/sh /home/tony/Workspace/cocoonr/boilerplate/svg2djangohtml $@/$# /home/tony/Workspace/cocoonr/ui/templates/inc/icons/

我多次测试了它,改变了一些东西,当 incrond 作为服务运行时(使用 openrc),无法使其工作。

如果我在前台运行 incrond ( incrond -n),那么 Tony 的 incrontab 就可以工作

如果我将 root 的 incrontab 设置为上面给出的值,即使作为服务运行它也可以工作。

我的托尼在/etc/incron.allow

root
tony

并且没有/etc/incron.deny

我什至尝试使用更简单的 incrontab:

/tmp/foo IN_ATTRIB touch /tmp/bar

结果是一样的。

如何让用户的 incrontab 正常工作?

答案1

如果 incrontab 的二进制文件(我不知道,从未使用过它)没有设置他的 SGID 位,则可能会导致这种奇怪的行为。

设置它chmod g+s /path/to/binary(/usr/bin/incrontab,也许?)

您可以评估它是否是通过以下方式设置的:

ls -l /path/to/binary

(例子)

ls -l /usr/bin/crontab
-rwxr-s--x 1 root crontab 44336 Jun 23 18:47 /usr/bin/crontab

答案2

我遇到了类似的问题(这就是我发现这个问题的方式)。

如果以下命令使其工作,

incrontab -n

问题可能是 incron/incrond 服务未运行。检查它是否正在运行以及是否启用在启动时运行(以防系统重新启动)。

我面临的另一个问题是由于我无意中创建的无限循环。
如果您的脚本修改了 incron 正在监视的文件夹中的任何文件,它会不断触发事件,并且每个事件都会引发一个新进程(通过fork())。很快,该服务就无法再分叉了。在这种情况下,服务日志显示以下错误。

cannot fork process: resource temporarily unavailable

在此刻,

  • 停止服务
  • 更改脚本,使其不会修改监视文件夹中的文件
  • 重新启动服务

相关内容