Execute o script na inicialização no servidor AWS Ec2 Ubuntu 1404

Execute o script na inicialização no servidor AWS Ec2 Ubuntu 1404

Preciso iniciar serviços como elasticsearch, kafka no momento da inicialização da instância Ec2

Eu tentei @reboot no crontab, mas algo está errado

Script de shell:

#!/bin/sh

nohup /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch &

Entrada do Crontab:

@reboot sh /home/abhijeet/startServices.sh

não sei onde estou errando

Responder1

cronexecuta shells em um ambiente modificado com um mínimo PATHe presumivelmente /usr/binnão presente lá, portanto /usr/bin/nohupnão foi encontrado.

Você pode:

  • adicione /usr/binao PATH, em vez de modificar o seu crontab, você deve adicionar isto no topo do script:

    #!/bin/sh
    export PATH="$PATH":/usr/bin
    nohup /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch &
    
  • Use o caminho absoluto para nohup:

    #!/bin/sh
    /usr/bin/nohup /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch &
    

Observe que, de acordo com a crontabentrada, você está executando o script como um argumento para sh( dash) enquanto tem exatamente o mesmo shebang. Neste caso, isso não faz nenhuma diferença, mas tome cuidado se a coisa for diferente. Normalmente alguém tornaria o script executável e usaria shebang para indicar o intérprete desejado.


Agora,a parte mais importante. cronexecuta todos os trabalhos fornecidos em seus respectivos subshells e gera esses subshells paralelos (sem bloqueio), ou seja, executa trabalhos de maneira paralela. Então você não precisa do nohupand background ( &), basta fazer (com base no seu exemplo, /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearché executável):

@reboot /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch

informação relacionada