incrondがサービスとして実行されていると、ユーザーのincrontabは機能しません(rootのみ)。

incrondがサービスとして実行されていると、ユーザーのincrontabは機能しません(rootのみ)。

これは私のincrontabです(Tonyの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 -nTonyのincrontabは、前景でincrond()を実行すると機能します。

ルートの incrontab を上記の値に設定すると、サービスとして実行しても機能します。

私のTonyは次の場所にあります/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

この時点で、

  • サービスの中断
  • 監視フォルダのファイルを変更しないようにスクリプトを変更してください。
  • サービスの再起動

関連情報