私は3つの機能を持っています
function WatchDog {
sleep 1
#something
}
function TempControl {
sleep 480
#somthing
}
function GPUcontrol {
sleep 480
#somethimg
}
そして、私はそれを次のように実行しています
WatchDog | TempControl | GPUcontrol
このスクリプトはrc.localファイルにあります。したがって、論理的には自動的に実行されます。事は最初の機能がうまくいっているということです。しかし、2番目と3番目は始まっていません。しかし、私がそれを始めているなら
Sudo bash /etc/rc.local
それはうまくいきます。何が問題ですか? init.dディレクトリに追加する場合も同じです。
パイプは、1つのコマンドの出力を次のコマンドに送信します。 &
(アンパサンド)を探しています。これにより、プロセスがforkされ、バックグラウンドで実行されます。したがって、実行した場合:
WatchDog & TempControl & GPUcontrol
3つすべてを同時に実行する必要があります。
また、Sudo bash /etc/rc.local
を実行すると、それらは並列ではなく直列に実行されていると思います(各コマンドが完了するのを待ってから、次のコマンドを開始します)。それは次のようなものです:
WatchDog ; TempControl ; GPUcontrol
コマンド区切り文字
;セミコロン-
command1 ; command2
これは、成功したかどうかに関係なく、command2
の終了後にcommand1
を実行します
&アンパサンド-
command1 & command2
これにより、サブシェルでcommand1
が実行され、同時にcommand2
が実行されます。
OR論理演算子-
command1 || command2
これはcommand1
を実行し、次にcommand2
を実行します[〜#〜] only [〜#〜]command1
が失敗した場合
&& AND論理演算子-
command1 && command2
これはcommand1
を実行し、次にcommand2
[〜#〜] only [〜#〜]command1
が成功した場合に実行します。
単にGNU parallel:
export -f WatchDog && export -f TempControl && export -f GPUcontrol
parallel -j3 ::: WatchDog TempControl GPUcontrol
export -f <funcname>
-parallel
が参照する関数をエクスポートします
-j N
-[〜#〜] n [〜#〜]ジョブまで並列で実行
デモ用のテストケース:
function a () { seq -s' ' 1 10; sleep 10; }
function b () { echo {a..z}; sleep 5; }
function c () { echo {-100..-80}; sleep 10; }
export -f a && export -f b && export -f c
parallel --no-notice -j3 ::: c b a
a b c d e f g h i j k l m n o p q r s t u v w x y z
-100 -99 -98 -97 -96 -95 -94 -93 -92 -91 -90 -89 -88 -87 -86 -85 -84 -83 -82 -81 -80
1 2 3 4 5 6 7 8 9 10