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

遅れてバックグラウンドでコマンドを実行する方法は?

( sleep 300 ; echo "80" > /sys/class/leds/blue/brightness ) &

そうすれば、新しいバックグラウンド タスクを実行しながら、スクリプトを続行するか、すぐに制御を復元できます。 スクリプトの最初は、sleep と echo の 2 つのコマンドで始まります。

一般的なエラーは、sleep のいずれかを指定しようとしています。 または echo または & の両方 これは意図したとおりに機能しません。 () で一連のコマンドを起動する ただし、別のシェルプロセスでそれらを生成し、 & で全体をバックグラウンドに送信できます .

その機知に、積極的に役立つことがわかりました。私が開発する組み込みデバイスには、ウォッチドッグと連携するメイン アプリケーションがあります。起動直後にウォッチドッグ リセットをトリガーするような失敗が繰り返される場合、OS の起動からリセットまでの期間が非常に短く、SSH でログインしてアプリの起動をブロックするのに十分ではないため、リモートで修正するのは困難です。そのため、システムが非常に速く再起動したことを判断し、再起動した場合は遅延を導入して、手動で修正する時間を確保する方法が必要です.

 [ -f /tmp/startdelay ] && sleep 30
 touch /tmp/startdelay
 ( sleep 30 ; rm /tmp/startdelay ) &
 [ -f /tmp/noautostart ] && exit 0
 start_app

ログインして touch /tmp/noautostart を実行すると メインアプリが起動しません。ウォッチドッグが起動した場合、rm /tmp/startdelay 実行されず、次回システムが起動したときに、システムを停止するためにさらに 30 秒かかります。それ以外の場合、再起動は遅滞なく迅速に行われます。


at を使用 コマンド

echo "echo \"80\" > /sys/class/leds/blue/brightness" | at now + 5 min

バックグラウンドで実行されます


何かを 5 分で実行したいが、プログラムの残りの部分を続行 (または終了) させたい場合は、スリープもバックグラウンドで実行する必要があります:

#!/bin/bash

runWithDelay () {
    sleep $1;
    shift;
    "${@}";
}

runWithDelay 3 echo world &
echo hello    

これは hello を出力します そして 3 秒後 (メイン プログラムが終了した後)、world を出力します。 .

重要な部分は & です 関数の実行をバックグラウンドにフォークします。


Linux
  1. findコマンドを使用して権限を監査する方法

  2. 同じ引数で別のコマンドを実行するにはどうすればよいですか?

  3. 「tar」コマンドと「find」コマンドを組み合わせる方法

  1. システム管理者(root)としてコマンドを実行する方法は?

  2. コマンドラインアプリをバックグラウンドに直接送信する方法は?

  3. シェルから Vim コマンドを実行するには?

  1. 例を使用してLinuxでwコマンドを使用する方法

  2. 例でchgrpコマンドを使用する方法

  3. 検索コマンドを使用してLinuxでファイルを検索する方法