私はparallel
bash機能を実行するためにGNUを使用しています。この関数には、プログラムを再起動するbashスクリプトが含まれています。最初は再起動しても大丈夫でしたが、終了parallel
時にプログラムも失敗しました。なぜ?
#!/bin/bash
function_A () {
local module=$1
set -x
cd /dir/${module}/;sh stop_${module}.sh;sh start_${module}.sh;sleep 10
}
export -f function_A
parallel --tag --onall --env function_A -S my_host function_A ::: my_program
PS出力:
root 12967 0.0 0.0 65960 1152 pts/1 Ss+ 16:30 0:00 bash -c echo $SHELL | egrep "/t?csh" > /dev/null && echo CSH/TCSH DO NOT SUPPORT newlines IN VARIABLES/FUNCTIONS && exec false;? eval `echo $SHELL | grep "/t\{0,1\}csh" > /dev/null && echo setenv PARALLEL_SEQ 1\; setenv PARALLEL_PID 6431 || echo PARALLEL_SEQ=1\;export PARALLEL_SEQ\; PARALLEL_PID=6431\;export PARALLEL_PID` ; tty >/dev/null && stty isig -onlcr -echo;echo $SHELL | grep "/t\{0,1\}csh" > /dev/null && setenv function_A \(\)\ \{\ \ local\ module=\$1\;"?"\ set\ -x\;"?"\ cd\ /dir/\$\{module\}/\;"?"\ sh\ test.sh\;"?"\ sleep\ 10"?"\} || export function_A=\(\)\ \{\ \ local\ module=\$1\;"?"\ set\ -x\;"?"\ cd\ /dir/\$\{module\}/\;"?"\ sh\ test.sh\;"?"\ sleep\ 10"?"\} && eval function_A"$function_A";function_A my_program
ベストアンサー1
あなたの質問について私が理解したのは、リモートシステムでデーモンを起動し、GNU Parallelが終了した後でもデーモンを実行し続けなければなりません。
これを行うには、ログアウト後もコマンドを実行し続けるツールを使用する必要があります。私は次の3つのツールを知っています。
nohup
screen
tmux
したがって、関数では次のように使用します。
cd /dir/${module}/;nohup sh stop_${module}.sh;nohup sh start_${module}.sh;sleep 10