【问题标题】:Create cron job on aws ebs to run a python script在 aws ebs 上创建 cron 作业以运行 python 脚本
【发布时间】:2019-02-02 11:16:13
【问题描述】:

我在 aws 上有一个 Elastic BeanStalk 服务器,用作 JSON 服务器。数据文件需要每天更新。 我有一个 python 脚本,我想在每个工作日运行它来更新数据文件。我创建了 .ebextensions 文件夹并在下面创建了 cronjob.config。我想每天运行 update_data_files.py。 我使用的 cronjob.config 模板来自:https://aws.amazon.com/premiumsupport/knowledge-center/cron-job-elastic-beanstalk/

问题: 如何将此脚本作为 cronjob 运行? ebs 中上传的文件夹的路径是什么,以便运行 python 脚本?

python3 update_data_files.py

.....cronjob.config.....

files:
    "/etc/cron.d/mycron":
        mode: "000644"
        owner: root
        group: root
        content: |
            5 16 * * 1-5 root /usr/local/bin/myscript.sh
    "/usr/local/bin/myscript.sh":
        mode: "000755"
        owner: root
        group: root
        content: |
            #!/bin/bash
            date > /tmp/date
            # Your actual script content

            python3 update_data_files.py

            exit 0
commands:
    remove_old_cron:
        command: "rm -f /etc/cron.d/*.bak"

【问题讨论】:

    标签: amazon-ec2 amazon-elastic-beanstalk


    【解决方案1】:

    首先cronjob.config文件描述了两个文件:/etc/cron.d/mycron/usr/local/bin/myscript.sh

    第一个文件放在/etc/cron.d 目录中,这是您放置cron jobs in Linux 的地方之一。 mycron 文件在这种情况下是您的 cron 作业,它包含以下行:

    5 16 * * 1-5 root /usr/local/bin/myscript.sh

    指示在周一至周五的 16:05 运行 myscript.sh(作为 root 用户)。将文件放入此目录后,cron 将自动检查它并在指定时间运行作业。你不需要再做任何事情了。

    第二个文件/usr/local/bin/myscript.sh 是由 cron 作业运行的文件。

    考虑到在哪里可以找到这些文件的问题 - 您在上面的名称中提供了它们的完整路径。

    /etc/cron.d 目录中设置的 crons 无法使用 crontab -lsudo crontab -l 命令查看,但这并不意味着它们不会运行 - 此目录中的文件是 constantly monitored and parsed as cron jobs .

    如果您认为您的脚本没有被执行,请通过修改您的 cron 作业进行简单测试。例如:

    * * * * * root echo $(date) >> /tmp/cron.log; /usr/local/bin/myscript.sh
    

    此作业会将当前日期和时间(每 1 分钟)打印到在 /tmp 中创建的 cron.log 文件中。之后它将尝试执行您的命令。您可以通过检查此日志文件来检查 cron 作业是否已执行。

    然后,如果您的命令静默失败,您可以将脚本的标准输出和标准错误重定向到某个日志文件,以检查其执行出现了什么问题。

    【讨论】:

    • 查看我的答案中的链接(在“ssh 进入 Elastic Beanstalk 实例”下)或官方AWS docs。无论如何,您为什么需要进入这些目录?指定 cronjob.config 后,一切都应该正常工作。
    • 我终于可以通过 ssh 访问实例了。一切都在他们应该在的地方; myscript.sh 在“/usr/local/bin”中,“mycron”在“/etc/cron.d”中。但是,当我运行“crontab -l”时,它返回“ec2-user 没有 crontab!
    • 这是因为您以 ec2 用户身份登录系统,而在 mycron 命令中您指定 root,这意味着 cronjob 是针对 root 用户的。运行 sudo crontab -u root -l - 这将显示 root 用户的计划 crons。我相应地更新了答案。
    • 当我运行“sudo crontab -u root -l”时,它返回“root 没有 crontab”。脚本没有被执行。
    • 我复制了这个,这是正确的 - crontab -l 将列出仅使用 crontab -e 创建的 cron 作业,但不会列出在 /etc/cron.d 目录中安排的作业(这是你的情况)。通常,这是调度 cron 作业的两种不同方式。但这并不意味着你的脚本没有被执行——检查我的回答中的更新,我给了你一些提示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 2014-02-02
    相关资源
    最近更新 更多