Linux環境でファイル更新をトリガーにバッチを実行する方法としてincronを試したときに嵌った事象について備忘を残します。
rootユーザであれば問題なく起動しますが、rootユーザ以外でincronを実行しようとすると下記のようなエラーがでます。
table for user ユーザネーム changed, reloading
access denied on ncrontab – events will be discarded silently
cannot create watch for user ユーザネーム: (2) No such file or directory
incronのログ情報はcronと共用なので[ /var/log/cron ] にはかれます。ただ見づらいので[ sudo tail -f /var/log/cron ]と実行するのがベターです。
[ incrontab -e ]でコマンドを作成しているので[ /var/spool/incron ] 配下にはユーザ名のファイルでユーザテーブルが出来ていたのですが何度起動しなおしても同様のエラーになりました。いろいろ調べたところ[/etc/incron.conf]にある設定ファイルを弄ることでエラーが出なくなるとのことだったので試してみました。
【 /etc/incron.conf 】のuser_table_dirのコメントアウトをはずします。
# Parameter: user_table_dir # Meaning: user table directory # Description: This directory is examined by incrond for user table files. # Default: /var/spool/incron # # Example: user_table_dir = /var/spool/incron.usertables ← ここ
デフォルトでは/var/spool/incronのパスを参照しているみたいですが、rootユーザ以外が利用する場合は/var/spool/incron.usertablesを利用するみたいです。コメントアウトしてincronの再起動を行うとエラーが出なくなりました。
試しに[ incrontab -e ]でコマンドを作成してみてあところ作成したユーザ名で/var/spool/incron.usertables配下にファイルが作成されました。
次にトリガーとなるファイルを弄ってバッチが起動するかを確認したところバッチ起動に成功しました。
incronは便利なのですが情報が少ないので嵌ると解決に時間がかかります・・・。
解決のために参考にしたサイトを記載しておきます。
コメント