GNU並列終了時に私のプログラムも失敗します。

GNU並列終了時に私のプログラムも失敗します。

私はparallelbash機能を実行するために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

おすすめ記事