Submeta a senha com sudo e execute o script com nohup

2

Eu gostaria de baixar e executar um script em segundo plano para que a tarefa seja independente do shell e de sua saída. Além disso, este script deve ser executado como sudo , usando:

echo MY_PWD | sudo -u MY_USER -S ...

Portanto, é necessário apenas uma única linha de código na minha SSH-Session, que faz a autenticação e cria a tarefa em segundo plano, incluindo várias linhas. Além disso, o setup-script deve ser removido após a execução bem-sucedida ou malsucedida do NEW_SCRIPT_NAME.sh As linhas de código são:

wget https://URL_TO_SCRIPT.sh -O NEW_SCRIPT_NAME.sh
sed -i 's/\r$//' NEW_SCRIPT_NAME.sh
chmod +x NEW_SCRIPT_NAME.sh
sudo nohup NEW_SCRIPT_NAME.sh &
rm NEW_SCRIPT_NAME.sh

Eu tentei isso:

echo raspberry | sudo -u pi -S wget https://URL_TO_SCRIPT.sh -O NEW_SCRIPT_NAME.sh && sed -i 's/\r$//' NEW_SCRIPT_NAME.sh && chmod +x NEW_SCRIPT_NAME.sh && nohup ./NEW_SCRIPT_NAME.sh & && rm NEW_SCRIPT_NAME.sh

Isso causa o seguinte erro:

-bash: syntax error near unexpected token '&&'

O que pode ser corrigido removendo o & na linha nohup , mas isso fará com que o script seja executado em primeiro plano, não em segundo plano, o que é necessário para meus propósitos.

Espero que alguém possa ajudar. Muito obrigado antecipadamente.

    
por user3191334 17.06.2016 / 17:05

1 resposta

3

Esta é uma sintaxe errada no bash:

nohup ./NEW_SCRIPT_NAME.sh & && rm NEW_SCRIPT_NAME.sh

De Shellcheck :

Line 1:
nohup ./NEW_SCRIPT_NAME.sh & && rm NEW_SCRIPT_NAME.sh
                             ^-- SC1070: Parsing stopped here. Mismatched keywords or invalid parentheses?

Você não pode simplesmente executar something & && something , porque colocar o primeiro comando em segundo plano evita que você espere pelo código de retorno do script.

Você pode executar todo o pipeline no nohup em segundo plano (preferencialmente como um script):

nohup ./run.sh &

ou se você realmente deseja ter tudo em um comando, é necessário aguardar o resultado:

nohup ./NEW_SCRIPT_NAME.sh & wait && rm NEW_SCRIPT_NAME.sh

, que aguardará o término do script antes de removê-lo.

    
por 17.06.2016 / 18:48