incrontab: 変更されたファイルの変更

incrontab: 変更されたファイルの変更

を使用してincrontabファイルを監視し、ファイルが変更されるたびにその中の文字列を置き換えたいと思います。しかし、これは無限ループを引き起こすようです。次の表で構成した場合:

/etc/file.md    IN_MODIFY   sed -i 's/Hello/Hi/g' $@

一度は動作しましたが、再び動作しませんでした。エラーメッセージも見えず、状態もincrond良好に保たれますが、サービスが無限ループに陥ったようです。再起動すると再び動作します。

このような無限ループを防ぐ方法はありますか?それとも私の問題を解決する別の方法がありますか?

ベストアンサー1

分かると無限ループに閉じ込められたわけではありませんが、このエラー

私が監視しているファイルを変更するサービスは、単にファイルを変更するのではなく、削除して再生成するサービスです。削除するとincrond視聴が停止し、IN_IGNOREDイベント録画時に確認できます。そのため、再起動後は常に一度だけ動作しますincrond

ファイル内の時計を失わないように、リンクされたGitHubの問題でも言及されている回避策を使用しました。ファイルを直接監視するのではなく、親ディレクトリを監視しています。このディレクトリの他のすべてのイベントに反応しないように、sedコマンドをスクリプトファイルに入れて、関心のあるファイル名のフィルタを追加する必要がありました。

/etc    IN_CLOSE_WRITE  /home/user/myscript.sh $@ $#

そして/home/user/myscript.sh

#!/bin/bash
if [ "$2" == "file.md" ]; then
    sed -i 's/Hello/Hi/g' "$1/$2"
fi

また、私のニーズに比べて早すぎて数ミリ秒がトリガされるようになってIN_MODIFY変更しました。IN_CLOSE_WRITEIN_MODIFY

sed -i幸いなことに、上記の表はファイルを変更したり書き込んだりするのではなく、置き換え()IN_MOVE_TOしたのでループを生成しません。IN_MODIFYIN_CLOSE_WRITE

おすすめ記事