bash
で ビルトインでできること:
coproc read -t 10 && wait "$!" || true
sleep
を使用せずに 10 秒間スリープするには . coproc
read
になるようにすることです の stdin は、何も出てこないパイプです。 || true
wait
のためです の終了ステータスは、errexit
の場合にシェルを終了させる SIGALRM 配信を反映します。 オプションが設定されています。
他のシェル:
mksh
と ksh93
sleep
を持っている 組み込み、そこで他のものを使用しても意味がありません (ただし、両方とも read -t
をサポートしています) ).
zsh
read -t
もサポート 、しかし select()
の組み込みラッパーもあります 、したがって、次のものも使用できます:
zmodload zsh/zselect
zselect -t 1000 # centiseconds
インタラクティブなシェル セッションから実行するようにスケジュールする場合は、zsh/sched
も参照してください。 zsh
のモジュール .
sleep
の代替手段があります :at
です と cron
. sleep
に反して これらは、実行する必要がある時間を提供する必要があります。
-
atd
であることを確認してくださいservice atd status
を実行してサービスを実行しています .
ここで、日付が UTC 午前 11 時 17 分であるとします。 11:25 UTC にコマンドを実行する必要がある場合、構文は次のとおりです:echo "This is a test" | at 11:25
.
ここで、atd
に注意してください。 デフォルトでは、ジョブの完了を記録しません。詳細については、このリンクを参照してください。アプリケーションに独自のロギングがある方がよいでしょう。 -
cron
でジョブをスケジュールできます 、詳細については、次を参照してください:man cron
そのオプションまたはcrontab -e
を表示するには 新しい仕事を追加します。/var/log/cron
ジョブの実行に関する情報を確認できます。
参考までに sleep system call
現在の実行を中断し、w.r.t でスケジュールします。それに渡された引数。
編集:
@Gaius が述べたように、分時間を at
に追加することもできます command.しかし、時間が 12:30:30
であるとしましょう now +1 minutes
でスケジューラを実行しました . 1 分、つまり 60 秒が指定されていたにもかかわらず、at
12:31:30
まで待たない ジョブを実行するのではなく、12:31:00
でジョブを実行します .時間単位は minutes, hours, days, or weeks
にすることができます .詳しくは man at
を参照してください
例:echo "ls" | at now +1 minutes
その他のアイデア。
top -d10 -n2 >/dev/null
vmstat 10 2 >/dev/null
sar 10 1 >/dev/null
timeout 10s tail -f /dev/null