我已经通过Ansible设置了一个cron作业,但是当我使用crontab -l
时,我说我的cron是空的。
这是我设置它的脚本。
- name: Setup cron to run backup.sh every midnight
cron:
name="Backup S3 to GS"
minute="0"
hour="0"
job="sh ~/backup.sh"
cron_file=backup_s3
user=vagrant
但是当我进入流浪汉机器并且/etc/cron.d/
时,我可以看到backup_s3
文件存在。但是当我使用命令crontab -l
时,它说它是空的。
这是backup_s3
#Ansible: Backup S3 to GS
0 0 * * * vagrant sh ~/backup.sh
我知道它没有运行,因为我没有收到任何电子邮件说备份已经完成,而且当我手动运行脚本时它工作正常。
答案 0 :(得分:11)
好。这里有几层混乱。
首先,您在编辑(crontab -e
)或查看(crontab -l
)时看到的crontab是用户 cron。它位于一个神奇的假脱机目录/文件中。你不能直接编辑它(大约说话),也不是放置任何严重的crons的好地方。
由于您使用cron_file=
,Ansible通过在/etc/cron.d/
中放置一个条目来做适当的事情。这意味着可以将单个文件放在那里,这比尝试编辑文档更加明智。 (look at all the people struggling with lineinfile
here on stackoverflow)
这就是为什么它没有出现在crontab -l
中,这是一件好事。
就cron的输出而言,电子邮件甚至可以为您的Vagrant系统工作吗?它可能没有。有很好的办法解决这个问题。首先,看看/var/log/cron
。如果您没有,请在CRON
中查找/var/log/syslog
个条目。他们可能会指出是否存在问题。
接下来,crons通常无法很好地访问用户shell。这意味着你应该避免~
。此外,如果backup.sh
上的权限有误,则可能无法执行。最后,您可以管道输出,以便您可以看到它。以下是我建议您使用cron条目的内容:
job="/bin/sh /home/vagrant/backup.sh >> /home/vagrant/backup.log"
您还可以修改minute
/ hour
,以便更频繁地运行 - 这样您就不必等到一夜之间看看发生了什么。
一旦您完成了这项工作,您就有很多地方可以查找信息。 /var/log
中有两个位置,其中有一个新backup.log
,它会为您提供信息(如果存在,则表示已运行cron;如果有数据,则应该能够找出任何问题)。
更改job
行。在/var/log
和/home/vagrant/backup.log
中查找执行情况。