在AWS @reboot上运行脚本吗?

时间:2018-07-08 11:42:22

标签: bash amazon-web-services amazon-ec2 cron

我当前正在尝试运行脚本,该脚本将在我的AWS实例在实例生命周期内启动时在后台运行。在测试更复杂的脚本之前,我正在使用一个简单的脚本对其进行测试,以查看其是否有效:

#!/bin/bash

while [true]; do
    sleep 1
    echo "Hello World" >> "tempStorage.json"
done

我的sudo crontab -l返回:

# All the comment stuff
@reboot sh /home/ubuntu/test/testScript/test.sh

这是脚本的路径。我显然也已经运行chmod +x test.sh以确保其可执行文件。

问题是,当我停止然后启动AWS实例时,tempStorage.json文件中没有任何内容。我检查了其他线程,它们都暗示这是我应该做的事情,因此我很困惑,建议将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

应该可以。我认为问题在于您没有在脚本中提供tempSTorage.json文件的完整路径。因此,它将被写入与您要查找的文件夹不同的文件夹中,特别是默认情况下cron在其中启动进程的任何文件夹。尝试将其更改为/tmp/tempSTorage.json之类,然后再次重新启动服务器。

请注意,如果您想要某种可以在启动时启动并永远运行的东西,那可能不是最好的方法。在这种情况下,我会考虑将您的流程作为服务运行。

答案 1 :(得分:0)

正如Mark B所述,问题是cron脚本的执行目录。那么有两种解决方案。

A)按照Mark B的建议更改文件路径,这样脚本将类似于:

#!/bin/bash

while [true]; do
    sleep 1
    echo "Hello World" >> "/home/ubuntu/test/testScript/tempStorage.json"
done

B)更改cron执行目录,并保持脚本原样。如果您需要将脚本放在任何目录中,则效果更好。对于crontab,它看起来像这样:

# All the comment stuff
@reboot cd /home/ubuntu/test/testScript && sh test.sh