Por que o rc.local não executa este script?

1

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?

    
por Tue 17.12.2011 / 21:29

3 respostas

1

Tenha em conta que:

  1. segundo comando só pode ser iniciado quando o primeiro termina (ou vai para segundo plano);

  2. A opção
  3. -e interromperá a execução se um comando retornar um código de saída diferente de zero.

por enzotib 17.12.2011 / 23:16
1

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.

    
por Scott Severance 18.12.2011 / 10:27
0

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.

    
por RaisinBranCrunch 31.12.2016 / 08:08