我有一堆系统,上面有由Cron安排的工作,这是由Ansible建立的。检查crontab,我可以看到
#Ansible: Job Name
0 22 * * * /path/to/script.sh >/var/log/folder/script.log
我需要更改该条目以指向其他脚本。这很容易,除了某些有问题的系统更改了时间,我需要保留更改后的时间。我没有时间就尝试了一项艰巨的任务:
- name: Update Cron
cron:
name: Job Name
job: /path/to/new/script.sh >/var/log/folder/script.log
但是,这当然只剩下以下内容,因为每次选项默认为'*':
#Ansible: Job Name
* * * * * /path/to/new/script.sh >/var/log/folder/script.log
是否有什么好方法可以使Ansible更新cron条目而不破坏当前时间,或者有一种干净的方法来读取它并告诉Ansible写出当前时间?还是我不得不依靠一些丑陋且不建议使用的东西,例如使用lineinfile模块直接编辑相应的/ var / spool / cron /文件?
答案 0 :(得分:1)
这仅对cron模块是不可能的。但是我看到了一种干净的方法,并有机会同时增加您的库存。
command
模块与crontab -l
一起使用。stdout_lines
来找到cron名称注释,定义在下一行cron
模块。我承认通常要完成一项任务的步骤很多,但这是我能想到的唯一干净的方法。
答案 1 :(得分:1)
假设对主机进行某种形式的逻辑分组,而不是为crontab条目解析每个主机,可以设置每个组的时间,然后在清单中设置组以使用“ cron:”模块设置时间吗?
如果您需要确保时间条目具有一定的随机性(因此您没有500个主机都试图在同一时间上传日志文件),则可以使用“随机”过滤器以及一个如以下StackOverflow答案所示的种子: https://stackoverflow.com/a/45946949/187426