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
cron
executa shells em um ambiente modificado com um mínimo PATH
e presumivelmente /usr/bin
não presente lá, portanto /usr/bin/nohup
não foi encontrado.
Você pode:
adicione
/usr/bin
aoPATH
, em vez de modificar o seucrontab
, 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 crontab
entrada, 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. cron
executa 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 nohup
and 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