Cuando sale GNU en paralelo, mi progtwig también falla

Estoy usando GNU parallel para ejecutar una function bash. La function solo contiene el script bash para reiniciar mi progtwig. Al principio, el reinicio está bien, pero cuando sale parallel , mi progtwig también falla. ¿Por qué?

 #!/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 

Salida de 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 

Como entiendo su problema, quiere iniciar un daemon en la máquina remota, y cuando GNU Parallel sale, el daemon debe continuar ejecutándose.

Para eso, debe usar una herramienta que permita que un command continúe incluso después de cerrar session. Conozco 3 de estas herramientas:

 nohup screen tmux 

Entonces, úsalas en tu function:

  cd /dir/${module}/;nohup sh stop_${module}.sh;nohup sh start_${module}.sh;sleep 10 

Pruebe nohup sh "start_${module}.sh" & :

 #!/bin/bash function_A () { local module=$1 set -x cd "/dir/${module}/" sh "stop_${module}.sh" nohup sh "start_${module}.sh" & sleep 10 } export -f function_A parallel --tag --onall --env function_A -S my_host function_A ::: my_program 

El command nohup hará que el script subyacente no salga cuando el shell se cierre, por ejemplo, durante un cierre de session. '&' hará inmediatamente un seguimiento del process. Además, asegúrese de que su "start_${module}.sh" funciona de forma no interactiva; por ejemplo, intente ejecutarlo como sh -c 'sh start_${module}.sh' ) para asegurarse de que funciona.