特定のシェルプロセスで時々実行されるようにスクリプトをスケジュールできますか?

特定のシェルプロセスで時々実行されるようにスクリプトをスケジュールできますか?

cronは、時々実行されるプログラムをスケジュールするために使用できます。しかし、既存のシェルプロセスに限定されていないようです。

特定のbashプロセスの状態にアクセスするスクリプト(スクリプトを介して実行の出力jobsdirsシェルの出力にアクセスするなどsource)がある場合は、特定のbashプロセスで時々実行されるようにスケジュールするにはどうすればよいですか。

ありがとうございます。


更新:両方の答えは、実際には既存のbashプロセス状態への直接アクセスを提供しません。親シェルプロセスの一部のステータス情報をサブシェルプロセスに間接的にコピーできます。なぜ受け入れたのか覚えていません。

答え1

何をしているのか完全にはわかりませんが、何かを実行するバックグラウンドタスクを開始してからX秒待ってから繰り返すことができます。

はい

( while : ; do echo hello ; sleep 10 ; done ) &

答え2

date コマンドを使用して、省電力作業期間を動的に調整できます。

はい

now() { date '+%s'; }
next() { date -d $(date -d "1 hours" '+%H:00:00') '+%s'; }

( while : ; do echo "Your Tasks Here" ; sleep $(next) - $(now) ; done ) $ 

next() 関数内の日付形式は、定時に実行されるように構成されます。 15分ごとに実行するには、次のように調整できます。

next() { date -d $(date -d "15 minutes" '+%H:%M:00') '+%s'; }

また見なさい:次の時間の秒を検索するLinuxの日付コマンド

注:スリープはバックグラウンドで発生するため、上記のスクリプトを終了するのは少し面倒です。 PIDを介して終了したり、ループ操作を背景化したりしないことを検討してください。

関連情報