我需要在 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/bin
到PATH
,而不是修改您的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