Executar script na inicialização no AWS Ec2 Ubuntu 1404 Server

0

Eu preciso iniciar serviços como elasticsearch, kafka no tempo de inicialização da instância Ec2

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

Shell Script:

#!/bin/sh

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

Entrada do Crontab:

@reboot sh /home/abhijeet/startServices.sh

Eu não sei onde estou indo errado

    
por Abhijeet 09.09.2016 / 22:23

1 resposta

0

cron executa shells em um ambiente modificado com um% mínimo dePATH e presumivelmente /usr/bin não presente, portanto, /usr/bin/nohup não está sendo encontrado.

Você pode:

  • adicione /usr/bin ao PATH , em vez de modificar o crontab , você deve adicionar isso na parte superior 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 entrada crontab , você está executando o script como um argumento para sh ( dash ) enquanto possui exatamente o mesmo shebang. Neste caso, isso não faz qualquer diferença, mas tenha cuidado com isso se o shebang for diferente. Normalmente, um faria o script executável e usaria o shebang para indicar o intérprete desejado.

Agora, a parte mais importante . cron executa todos os jobs dados em suas respectivas subshells e gera essas subshells paralelas (non-blocking), isto é, executa jobs de maneira paralela. Então você não precisa do nohup e do backgrounding ( & ), apenas faça (baseado no seu exemplo, /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch é executável):

@reboot /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch
    
por heemayl 10.09.2016 / 11:15