
誰かがこれを行うプログラムを書く方法を教えてもらえますか? 5分後
echo "80" > /sys/class/leds/blue/brightness
このプログラムをサービスのようにバックグラウンドで実行したいと思います。rngd
私はLinuxについてはよくわからないので、そうすることはできません。
答え1
( 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秒があります。それ以外の場合は、再起動が速く、遅延が発生しません。
答え2
at
コマンドの使用
echo "echo \"80\" > /sys/class/leds/blue/brightness" | at now + 5 min
バックグラウンドで実行されます
答え3
プログラムを5分間実行し、残りのプログラムを継続(または完了)するには、バックグラウンドでスリープ機能も設定する必要があります。
#!/bin/bash
runWithDelay () {
sleep $1;
shift;
"${@}";
}
runWithDelay 3 echo world &
echo hello
これが印刷され、hello
3秒後(メインプログラムが終了した後)が印刷されますworld
。
重要なのは、&
関数の実行をバックグラウンドに分岐することです。