Quando a saída paralela do GNU, meu programa também falha

3

Estou usando o GNU parallel para executar uma função bash. A função contém apenas o script bash para reiniciar meu programa. No início, a reinicialização está ok, mas quando parallel sai, meu programa também falha. 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

Saída do 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=\\;"?"\ set\ -x\;"?"\ cd\ /dir/\$\{module\}/\;"?"\ sh\ test.sh\;"?"\ sleep\ 10"?"\} || export function_A=\(\)\ \{\ \ local\ module=\\;"?"\ set\ -x\;"?"\ cd\ /dir/\$\{module\}/\;"?"\ sh\ test.sh\;"?"\ sleep\ 10"?"\} && eval function_A"$function_A";function_A my_program
    
por slowlaris 12.08.2014 / 16:30

2 respostas

1

Como eu entendo seu problema, você quer iniciar um daemon na máquina remota, e quando o GNU Parallel sai, o daemon deve continuar rodando.

Para isso, você deve usar uma ferramenta que permita que um comando continue mesmo após o logout. Eu conheço 3 dessas ferramentas:

nohup
screen
tmux

Portanto, use-os na sua função:

    cd /dir/${module}/;nohup sh stop_${module}.sh;nohup sh start_${module}.sh;sleep 10
    
por 25.03.2015 / 10:29
1

Experimente 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

O comando nohup fará com que o script subjacente não saia quando o shell sair, por exemplo, durante um logout. '&' irá imediatamente fundo o processo. Além disso, certifique-se de que seu "start_${module}.sh" funcione de maneira não interativa; por exemplo, tente executá-lo como sh -c 'sh start_${module}.sh' ) para ter certeza de que funciona.

    
por 25.06.2015 / 07:29