一定時間が経過した後にコマンドを実行しますか?

一定時間が経過した後にコマンドを実行しますか?

長いプロセスを実行している場合、いくつかの時間ベースのコマンドを実行する方法はありますか?

たとえば、私は実行に約10分かかる非常に長いプロセスを実行しています。

5分後に別のコマンドを実行したいと思います。説明を簡単にするために、個々のコマンドは次のとおりです。echo 5 minutes complete

(注:コマンドの完了を進めたくないので、指定された間隔の後にコマンドを実行するだけです。)

可能ですか?

答え1

速く走る:

long-command & sleep 300; do-this-after-five-minutes

do-this-after-five-minutes5分後に実行されます。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!!!"

longprocessin aを実行し、以前sub-shellに作成された「ロック」ファイルが存在するかどうかを監視します。

答え4

atコマンドを使用する他の方法を参照してください。

play次のコマンドを使用すると、notify-sendより明確でユーザーフレンドリーな通知を受信するために使用できます。

  • メッセージとともに通知ポップアップを表示
  • サウンド再生
# schedule notification
echo "notify-send 'Wake up!' && play ~/Music/alarm.wav" | at "now + 5 minute"

次のようになります。
ここに画像の説明を入力してください。


メモ:このatコマンドはオプションでスクリプトファイルを実行できます。その他の機能については、マニュアルページをご覧ください。
これらのパッケージはデフォルトでディストリビューションで利用できない可能性があるため、手動でインストールする必要があります。

関連情報