为什么Ansible的cronjob安装程序未运行?

为什么Ansible的cronjob安装程序未运行?,cron,vagrant,ansible,ansible-playbook,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 us

我已经通过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
但是当我进入流浪者机器和ls
/etc/cron.d/
时,我可以看到
备份文件在那里。但是当我使用command
crontab-l
时,它说它是空的

这是备份的内容

#Ansible: Backup S3 to GS
0 0 * * * vagrant sh ~/backup.sh

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

好的。这里有几层混乱

首先,您在编辑(
crontab-e
)或查看(
crontab-l
)时看到的crontab是一个用户cron。它位于一个magic spool目录/文件中。您不能直接编辑它(大致来说),而且它不是放置任何严肃的cron的好地方

由于您使用的是
cron\u file=
,Ansible通过在
/etc/cron.d/
中放置一个条目来执行适当的操作。这意味着可以将单个文件放在那里,这比试图编辑文档要明智得多。()

这就是为什么它没有出现在
crontab-l
中,这是一件好事

就cron的输出而言,电子邮件是否适用于您的流浪系统?可能不会。这是有好办法的。首先,看看
/var/log/cron
。如果没有,请在
/var/log/syslog
中查找
CRON
条目。它们可能表明是否存在问题

其次,cron通常不能很好地访问用户shell。这意味着你应该避免使用
~
。此外,如果您在
backup.sh
上的权限错误,则可能无法执行。最后,您可以对输出进行管道化处理,以便查看它。下面是我建议您对cron条目执行的操作:

job="/bin/sh /home/vagrant/backup.sh >> /home/vagrant/backup.log"
您还可以修改
分钟
/
小时
,使其更频繁地运行-这样您就不必等待一夜就可以看到发生了什么

一旦你做到了这一点,你就有很多地方可以寻找信息。在
/var/log
中有两个位置,一个新的
backup.log
将为您提供信息(如果存在,cron已经运行;如果其中有数据,您应该能够找出任何问题)

太长,读不下去了
更改
作业
行。在
/var/log
/home/vagrant/backup.log

中查找执行情况Crontab是每个用户的,因此在使用Crontab-l时,您可能会看到不同用户的Crontab,即您登录的用户的文件。我以
vagrant
身份登录。但是,我是否可以检查我的cron是否确实正确运行。我总是让cronjob简单地在实际脚本需要工作的地方创建一个目录。像这样,我知道a)cron正在工作,b)权限设置正确。我无法从这里看出您的cronjob有什么问题,但权限是一个非常常见的陷阱。您还可以尝试在cron行中使用sh的完整路径,使用
name=
不会将文件放在
/etc/cron.d/
中,使用
cron\u file=
会使它在那里查看。固定的。请注意,将来您可以自己编辑它。谢谢@tedder42,我对使用ansible和cron都是新手,而且我也不太认真地使用cron,所以现在还不太自信。我可能会回来做一些编辑:)例如,在运行我的ansible cron任务后,当我作为用户时,我可以看到
crontab-l
中的条目(
vagrant
,在OPs案例中)。我想我的问题是由于我复制到作业位置的文件不可执行,以及使用
job=/some/script.sh
而没有
job=sh…
部分或
#/bin/sh
位于.sh文件的开头。