我需要在 Ec2 实例启动时启动 elasticsearch、kafka 等服务
我已经尝试在 crontab 上使用 @reboot,但出现了问题
Shell 脚本:
#!/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