在 AWS Ec2 Ubuntu 1404 服务器启动时运行脚本

在 AWS Ec2 Ubuntu 1404 服务器启动时运行脚本

我需要在 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/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

相关内容