为什么Ansible设置的cronjob没有运行?

时间:2015-08-09 20:00:48

标签: cron vagrant ansible ansible-playbook

我已经通过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

我知道它没有运行,因为我没有收到任何电子邮件说备份已经完成,而且当我手动运行脚本时它工作正常。

1 个答案:

答案 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;如果有数据,则应该能够找出任何问题)。

TLDR

更改job行。在/var/log/home/vagrant/backup.log中查找执行情况。