終了信号を取得して終了するスクリプトを作成しようとしています。一般的なbashトラップアプローチを使用する代わりに、10秒ごとにファイルの生成を監視して終了する前にいくつかの項目をクリーンアップしたいと思います。
私が試したことは次のとおりです。
poll_time=10 // poll every 10 seconds
((term_time=$SECONDS+240)) // monitor until 4 min from current script time exec
while (( $SECONDS < $term_time)) do
if [[ -r $some_path/file.txt ]]; then
cleanup_function
exit
fi
sleep ${poll_time}
done
//if file doesnt exit continue with below code
//blah blah blah ....
もっと良い方法がありますか?上記のコード行が機能しますか?
ベストアンサー1
inotifywait
fromがinotify-tools
必要です(少なくとも見てください)。次の行は、スクリプトで必要なものと同じことを行います。
inotifywait -e create --timeout 240 "${some_path}/file.txt" && { cleanup_function; exit ; }
違いinotifywait
は、イベントベースの方法で動作するため、ポーリングや睡眠が不要なことです。