( 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
を出力します。 .
重要な部分は &
です 関数の実行をバックグラウンドにフォークします。