【问题标题】:Run Script on AWS @reboot?在 AWS @reboot 上运行脚本?
【发布时间】:2018-12-16 07:35:57
【问题描述】:

我目前正在尝试运行将在我的 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 文件中没有任何内容。我检查了其他线程,他们都建议这是我应该做的,所以我很困惑,建议将不胜感激。谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 你完全正确。好电话,出于某种原因,我认为它会在找到脚本的路径中执行,但我发现我错了。可能会去 cd 然后运行脚本,看看是否有效。
    • 作为对您的编辑的回应,您将其用作服务可能是正确的,我会对此进行调查,但至少现在解决了 crontab 问题。
    • 您也可以将cd 命令作为第一步放在脚本中,而不是放在 crontab 中。
    • 是的,我在这个问题的自我回答中提到了这一点。
    • 不,您实际上并没有提到这一点。我是说不要将cd 命令放在crontab 中(如您在#2 中提到的),您可以将cd /home/ubuntu/test/testScript 放在bash 脚本中。您甚至可以花哨并输入cd `$(dirname "$(readlink -f "$BASH_SOURCE")")` 之类的内容,以便它始终更改为脚本所在的任何目录。
    【解决方案2】:

    正如 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
    

    【讨论】:

      猜你喜欢
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      相关资源
      最近更新 更多