このアクションを実行するプログラムの作成方法を誰かに教えてもらえますか:5分後
echo "80" > /sys/class/leds/blue/brightness
このプログラムをバックグラウンドで実行したい(rngd
サービスなど)Linuxについてあまり詳しくないため、これを実行できません。
回答
( sleep 300 ; echo "80" > /sys/class/leds/blue/brightness ) &
これにより、スクリプトを続行するか、新しい<スクリプトのem>バックグラウンドタスクは、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
バックグラウンドで実行されます
コメント
- これは正しい方法です、ただし、atdデーモンを実行する必要があり、ほとんどのシステムではパッケージをインストールする必要があります。
- 一重引用符を使用してエスケープを回避し、
echo
ヒアドキュメントまたはherestringを使用します。 - @Julian、
at
は標準のPOSIXコマンドです。どのUnixライクなシステムがデフォルトで利用できない'? - @St é phaneChazelas-良い質問。 'この問題が発生したことは知っていますが、少し前のことです。私は少しチェックしましたが、atコマンドはかなり遍在しているようです。また、atdはLinux固有であり、一部のLinuxシステムでもBSDスタイルのcronデーモンに置き換えられる可能性があるようです。 'コメントが古くなっていると考えてみましょう。
- ' at 'でAndroid8にコマンドが見つかりませんでした
回答
5で何かを実行したい場合分ですが、プログラムの残りの部分を続行(または終了)するには、スリープをバックグラウンドで実行する必要があります。
#!/bin/bash runWithDelay () { sleep $1; shift; "${@}"; } runWithDelay 3 echo world & echo hello
これによりhello
そして3秒後(メインプログラムが終了した後)、world
を出力します。
重要な部分は
は、関数の実行をバックグラウンドにフォークします。
コメント
- 代わりに
runWithDelay () { sleep $1; "${@:2}"; }
を提案してもいいですか? - そう思います2番目の例では
doWhateverWithDelay 3 &
と読む必要があります。 - @manatwork:乾杯。
- @goldilocks、は、引用することができ、引用された単語のリストとして展開されることです。したがって、
"$@"
(または中かっこが好きな場合は"${@}"
)にする方がよいでしょう。 pastebin.com/MU7hbB2C
を参照してください。 9743b98428 “>
)、しかし明らかにそれは少し素朴でした。
&
を使用して睡眠をバックグラウンドにします。 "睡眠もバックグラウンドで行う必要があります" は最初から最初の行にありました。 '信じられない場合は、編集履歴をご覧ください。そして、私の答えはあなたの答えより5分古いです:P()
グループをバックグラウンドにしないと、元のシェルは生成されたシェルが終了するまで一時停止します。)