Führen Sie das Skript beim Start auf dem AWS Ec2 Ubuntu 1404-Server aus

Führen Sie das Skript beim Start auf dem AWS Ec2 Ubuntu 1404-Server aus

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

cronführt Shells in einer modifizierten Umgebung mit einem minimalen aus PATHund ist dort vermutlich /usr/binnicht vorhanden, /usr/bin/nohupwird also nicht gefunden.

Du kannst:

  • Fügen Sie /usr/bindem hinzu PATH, anstatt crontabdas 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 crontabEintrag 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. cronfü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 nohupHintergrundfunktion ( &), sondern führen einfach Folgendes aus (basierend auf Ihrem Beispiel, /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearchist ausführbar):

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

verwandte Informationen