在 AWS Ec2 Ubuntu 1404 伺服器上啟動時執行腳本

在 AWS Ec2 Ubuntu 1404 伺服器上啟動時執行腳本

我需要在 Ec2 實例啟動時啟動 elasticsearch、kafka 等服務

我已經在 crontab 上嘗試過 @reboot 但出了問題

外殼腳本:

#!/bin/sh

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

crontab 條目:

@reboot sh /home/abhijeet/startServices.sh

我不知道我哪裡錯了

答案1

cron在修改後的環境中執行 shell,其中最小PATH且可能/usr/bin不存在,因此/usr/bin/nohup找不到。

你可以:

  • 添加/usr/binPATH,而不是修改您的crontab,您應該將其添加到腳本的頂部:

    #!/bin/sh
    export PATH="$PATH":/usr/bin
    nohup /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch &
    
  • 使用絕對路徑nohup

    #!/bin/sh
    /usr/bin/nohup /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch &
    

請注意,根據該crontab條目,您正在將腳本作為sh( dash) 的參數執行,同時具有完全相同的 shebang。在這種情況下,這沒有任何區別,但如果 shebang 不同,請小心這一點。通常,人們會讓腳本可執行並使用 shebang 來指示所需的解釋器。


現在,最重要的部分cron在各自的子 shell 中運行所有給定的作業並產生這些子 shell 並行(非阻塞),即以並行方式運行作業。因此,您不需要nohup和背景(&),只需執行(根據您的範例,/home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch是可執行的):

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

相關內容