为什么Ansible的cronjob安装程序未运行?
我已经通过Ansible设置了一个cron作业,但是当我使用为什么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
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/
时,我可以看到备份文件在那里。但是当我使用commandcrontab-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文件的开头。