長いプロセスを実行している場合、いくつかの時間ベースのコマンドを実行する方法はありますか?
たとえば、私は実行に約10分かかる非常に長いプロセスを実行しています。
5分後に別のコマンドを実行したいと思います。説明を簡単にするために、個々のコマンドは次のとおりです。echo 5 minutes complete
(注:コマンドの完了を進めたくないので、指定された間隔の後にコマンドを実行するだけです。)
可能ですか?
答え1
速く走る:
long-command & sleep 300; do-this-after-five-minutes
do-this-after-five-minutes
5分後に実行されます。long-command
バックグラウンドで実行されます。
答え2
これを行うことができるライナーがあります。
( ( sleep $TIMEOUT ; echo "5 minutes complete") & $COMMAND )
あなたの場合はTIMEOUT = 5mで、COMMANDは長いコマンドです。
この投稿に対する私の答えもご覧ください。「サービスネットワークの再起動」タイムアウト
答え3
次のスクリプトを使用できます。
#!/bin/bash
TEMPFILE="$(mktemp)"
STARTTIME="$(date +%s)"
(./longprocess; rm -f "$TEMPFILE") &
while [ -f "$TEMPFILE" ]; do
sleep 1s
NOW="$(date +%s)"
if (( (NOW-STARTTIME) % 300 == 0 )); then
echo "$(( (NOW-STARTTIME)/60 )) minute(s) elapsed"
fi
done
echo "Done!!!"
longprocess
in aを実行し、以前sub-shell
に作成された「ロック」ファイルが存在するかどうかを監視します。
答え4
at
コマンドを使用する他の方法を参照してください。
play
次のコマンドを使用すると、notify-send
より明確でユーザーフレンドリーな通知を受信するために使用できます。
- メッセージとともに通知ポップアップを表示
- サウンド再生
# schedule notification
echo "notify-send 'Wake up!' && play ~/Music/alarm.wav" | at "now + 5 minute"
メモ:このat
コマンドはオプションでスクリプトファイルを実行できます。その他の機能については、マニュアルページをご覧ください。
これらのパッケージはデフォルトでディストリビューションで利用できない可能性があるため、手動でインストールする必要があります。