我在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"
首先,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
或crontab -l
命令无法查看在sudo crontab -l
目录中设置的crons,但这并不意味着它们不会运行 - 此目录中的文件是constantly monitored and parsed as cron jobs。
如果您认为您的脚本没有被执行,请通过修改您的cron作业进行简单的测试。例如:
* * * * * root echo $(date) >> /tmp/cron.log; /usr/local/bin/myscript.sh
此作业将打印当前日期和时间(每1分钟)到cron.log
中创建的/tmp
文件。之后它将尝试执行您的命令。您可以通过检查此日志文件来检查是否执行了cron作业。
然后,如果您的命令无声地失败,您可以将脚本的标准输出和标准错误重定向到某个日志文件,以检查其执行出了什么问题。