Ich muss Dienste wie Elasticsearch, Kafka beim Booten der Ec2-Instanz starten
Ich habe @reboot auf crontab versucht, aber etwas läuft schief
Shell-Skript:
#!/bin/sh
nohup /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch &
Crontab-Eintrag:
@reboot sh /home/abhijeet/startServices.sh
Ich weiß nicht, was ich falsch mache
Antwort1
cron
führt Shells in einer modifizierten Umgebung mit einem minimalen aus PATH
und ist dort vermutlich /usr/bin
nicht vorhanden, /usr/bin/nohup
wird also nicht gefunden.
Du kannst:
Fügen Sie
/usr/bin
dem hinzuPATH
, anstattcrontab
das Ihres zu ändern. Sie sollten Folgendes oben im Skript hinzufügen:#!/bin/sh export PATH="$PATH":/usr/bin nohup /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch &
Verwenden Sie den absoluten Pfad zu
nohup
:#!/bin/sh /usr/bin/nohup /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch &
Beachten Sie, dass Sie laut crontab
Eintrag das Skript als Argument für sh
( dash
) ausführen, während Sie genau dasselbe Shebang haben. In diesem Fall macht das keinen Unterschied, aber seien Sie vorsichtig, wenn das Shebang anders ist. Normalerweise würde man das Skript ausführbar machen und Shebang verwenden, um den gewünschten Interpreter anzugeben.
Jetzt,der wichtigste Teil. cron
führt alle angegebenen Jobs in ihren jeweiligen Subshells aus und startet diese Subshells parallel (nicht blockierend), d. h., Jobs werden parallel ausgeführt. Sie benötigen also nicht die nohup
Hintergrundfunktion ( &
), sondern führen einfach Folgendes aus (basierend auf Ihrem Beispiel, /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch
ist ausführbar):
@reboot /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch