Necesito iniciar servicios como elasticsearch, kafka en el momento del arranque de la instancia Ec2
Probé @reboot en crontab pero algo va mal
Guión de Shell:
#!/bin/sh
nohup /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch &
Entrada de crontab:
@reboot sh /home/abhijeet/startServices.sh
No se donde me estoy equivocando
Respuesta1
cron
ejecuta shells en un entorno modificado con un mínimo PATH
y presumiblemente /usr/bin
no está presente allí, por lo que /usr/bin/nohup
no se encuentra.
Puede:
agregue
/usr/bin
alPATH
, en lugar de modificar el suyocrontab
, debe agregar esto en la parte superior del script:#!/bin/sh export PATH="$PATH":/usr/bin nohup /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch &
Utilice la ruta absoluta para
nohup
:#!/bin/sh /usr/bin/nohup /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch &
Tenga en cuenta que, según la crontab
entrada, está ejecutando el script como argumento para sh
( dash
) mientras tiene exactamente el mismo asunto. En este caso, esto no hace ninguna diferencia, pero tenga cuidado si el asunto es diferente. Por lo general, uno haría que el script fuera ejecutable y usaría shebang para indicar el intérprete deseado.
Ahora,la parte más importante. cron
ejecuta todos los trabajos dados en sus respectivos subcapas y genera estos subcapas en paralelo (sin bloqueo), es decir, ejecuta trabajos de manera paralela. Por lo tanto, no necesita el nohup
fondo y ( &
), solo hágalo (según su ejemplo, /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch
es ejecutable):
@reboot /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch