Tenha em conta que:
-
segundo comando só pode ser iniciado quando o primeiro termina (ou vai para segundo plano);
A opção -
-e
interromperá a execução se um comando retornar um código de saída diferente de zero.
Eu preciso executar um script na inicialização, o script precisa ser executado em um determinado usuário, não como raiz, tentei adicionar o script a /etc/rc.local assim:
#!/bin/sh -e
#
# rc.local
#
#!/bin/sh
su - tue -c "/home/tue/main"
su - tue -c "/opt/craftbukkit/start.sh"
A primeira linha inicia um programa principal em / home / tue, isso está funcionando bem. A segunda linha é meu script, mas por algum motivo isso não está sendo executado?
Tenha em conta que:
segundo comando só pode ser iniciado quando o primeiro termina (ou vai para segundo plano);
-e
interromperá a execução se um comando retornar um código de saída diferente de zero.
Tente algo assim:
#!/bin/sh -e
#
# rc.local
#
#!/bin/sh
su - tue -c "/home/tue/main" &
su - tue -c "/opt/craftbukkit/start.sh" &
Isso iniciará os dois processos em segundo plano, para que o restante do script possa continuar normalmente. Se isso não é o que você quer, por favor, explique sua situação mais completamente.
Tem certeza de que seu comando não está sendo executado? Na minha situação, descobri que estava sendo executado, mas houve um erro que o fez parar. Você pode descobrir se está recebendo um erro usando algo como nohup:
nohup bash /home/ubuntu/myscript.sh > /home/ubuntu/error_log.txt 2>&1 &
... onde bash /home/ubuntu/myscript.sh
é o comando real que quero executar. Verifique o log de erros e veja o que você encontra.
Você pode estar executando algo como java ou um utilitário como o drush, e sua variável $ PATH não sabe como encontrá-lo no momento em que o /etc/rc.local é executado, o que foi um problema meu. A variável $ PATH é muito mínima no momento da execução deste script.
Se você quiser ver o que há em sua variável $ PATH no momento da execução, coloque isso no arquivo /etc/rc.local
:
echo $PATH > /home/rc_local_path.log
.. E verifique o arquivo de log após a reinicialização. No meu caso (e provavelmente seu), a variável path foi a seguinte:
/sbin:/usr/sbin:/bin:/usr/bin
O erro que recebi foi ao longo das linhas de drush - command not found
... então eu digitei command -v drush
e descobri que ele foi instalado em / usr / local / bin, que não estava no $ PATH no momento da executando o script, então eu fiz um symlink para ele via ln -s /usr/local/bin/drush /usr/bin/drush
. Agora meu script é executado sem erros.