このアクションを実行するプログラムの作成方法を誰かに教えてもらえますか:5分後
echo "80" > /sys/class/leds/blue/brightness
このプログラムを(rngd
サービスのように)バックグラウンドで実行したいのですが、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
を出力します。
重要な部分は&
関数の実行をバックグラウンドにフォークします。