incrond がサービスとして実行されている場合、ユーザーの incrontab が機能しない (ルートのみ)

incrond がサービスとして実行されている場合、ユーザーの incrontab が機能しない (ルートのみ)

これが私の 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をフォアグラウンドで実行すると(incrond -n)、tonyのincrontabが動作します

ルートの 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 サービスが実行されていないことにある可能性があります。実行されているかどうか、また起動時に実行するように有効になっているかどうかを確認してください (システムが再起動された場合)。

私が直面していたもう 1 つの問題は、私がうっかり作成してしまった無限ループが原因でした。
スクリプトが incron が監視しているフォルダ内のファイルを変更すると、イベントがトリガーされ続け、各イベントによって新しいプロセス (経由fork()) が発生します。すぐに、サービスはフォークできなくなります。この場合、サービス ログには次のエラーが表示されます。

cannot fork process: resource temporarily unavailable

この時点で、

  • サービスを停止する
  • 監視対象フォルダ内のファイルを変更しないようにスクリプトを変更する
  • サービスを再起動する

関連情報