私は3つの機能があります:
function WatchDog {
sleep 1
#something
}
function TempControl {
sleep 480
#somthing
}
function GPUcontrol {
sleep 480
#somethimg
}
私はそれを実行しています
WatchDog | TempControl | GPUcontrol
スクリプトは次の場所にあります。ローカルファイル文書。したがって、論理的に自動的に実行する必要があります。問題は、最初の機能が正しく機能することです。しかし、2番目と3番目はまだ始まっていません。しかし、このように始めると
sudo bash /etc/rc.local
うまくいきます。問題は何ですか? init.dディレクトリに追加しても同じことが起こります。
答え1
単にGNUを使用してください平行線:
export -f WatchDog && export -f TempControl && export -f GPUcontrol
parallel -j3 ::: WatchDog TempControl GPUcontrol
export -f <funcname>
- 参照する関数のエクスポートparallel
-j 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
答え2
パイプは、あるコマンドの出力を次のコマンドに送信します。&
(&記号)を探しています。これはプロセスをフォークし、バックグラウンドで実行します。したがって、実行すると:
WatchDog & TempControl & GPUcontrol
3つすべてを同時に実行する必要があります。
また、実行時にsudo bash /etc/rc.local
並列ではなくシリアルで実行すると思います(次のコマンドを開始する前に各コマンドが完了するのを待ちます)。次のようになります。
WatchDog ; TempControl ; GPUcontrol
コマンド区切り記号
;セミコロン -
command1 ; command2
command2
成功するかどうかにかかわらず、完了後に実行されます。command1
&アンパサンド -
command1 & command2
これはcommand1
サブシェルで実行され、command2
同時に実行されます。
||または論理演算子 -
command1 || command2
これは実行されcommand1
実行されますcommand2
ただcommand1
失敗した場合
&&AND論理演算子 -
command1 && command2
これは実行されcommand1
実行されますcommand2
ただ成功したらcommand1
。