を使用して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_WRITE
IN_MODIFY
sed -i
幸いなことに、上記の表はファイルを変更したり書き込んだりするのではなく、置き換え()IN_MOVE_TO
したのでループを生成しません。IN_MODIFY
IN_CLOSE_WRITE