當 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

在此刻,

  • 停止服務
  • 更改腳本,使其不會修改監視資料夾中的文件
  • 重新啟動服務

相關內容