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