GNU/Linux >> Linux の 問題 >  >> Linux

シェル:「sleep」を使わずにコマンドを遅らせることは可能ですか?

bash で ビルトインでできること:

coproc read -t 10 && wait "$!" || true

sleep を使用せずに 10 秒間スリープするには . coproc read になるようにすることです の stdin は、何も出てこないパイプです。 || true wait のためです の終了ステータスは、errexit の場合にシェルを終了させる SIGALRM 配信を反映します。 オプションが設定されています。

他のシェル:

mkshksh93 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

Linux
  1. Linuxスリープコマンド–指定された時間の遅延

  2. 長いスリープコールの後、Sudoパスワードを再入力せずにSudoコマンドを実行しますか?

  3. BashスクリプトでのLinuxスリープコマンドの使用

  1. Bash スクリプト:セッションをログに記録するための bash スクリプトからのスクリプト コマンドの使用

  2. Linux コマンドを使用してシェルのバージョンを確認するにはどうすればよいですか?

  3. シェルコマンドを使用してGDB内で環境変数を設定するには?

  1. [Linux]:「tar」シェルコマンドを使用するときにディレクトリを除外する方法

  2. 履歴に保存せずにシェルでコマンドを実行するにはどうすればよいですか? [Linuxのヒント]

  3. Unixでシェルコマンドを編集するためにViキーを使用しますか?