使用anacron,我可以将脚本和Ansible剧本放在适当的位置来完成各种琐碎的任务。自动化是IT和DevOps的理想选择,但根据我的经验,它可能没有什么不便之处。有很多次我为某些任务想出了一个很好的解决方案,我什至会写一个脚本,但我还没有真正自动化,因为机器上不存在易于自动化的基础设施我'我正在努力。我最喜欢的简单自动化工具曾经是cron系统,它古老、可靠、面向用户且简单(除了一种我永远记不起的调度语法)。然而,cron的问题在于它假设计算机一天24小时都在运行。在错过太多计划的备份后,我发现了anacron,这是一个基于时间戳而不是计划时间的cron系统。如果您的计算机在正常运行时关闭,anacron将确保它在重新打开时运行。创建作业就像将shell脚本放入三个目录一样简单:cron.day、cron.weekly或cron.monthly(如果需要,您可以定义更多)。使用anacron,我发现自己使用脚本和Ansible剧本来完成各种琐碎的任务,包括到期弹出窗口和事件提醒。这是针对现代问题的简单明了的解决方案,但如果计算机上未安装anacron,则它对我不起作用。使用Ansible进行软件设置每当我设置一台新计算机时,无论是笔记本电脑、工作站还是服务器,我都会安装anacron。这很容易,但是anacron的安装只提供了anacron命令。它不设置anacron用户环境。因此,我创建了一个Ansible剧本来设置用户使用anacron所需的内容并安装anacron命令。首先,标准的Ansible模板:----hosts:localhosttasks:CreatingdirectorieswithAnsible接下来,我为Anacron创建了目录树。您可以将其视为透明的crontab。-名称:创建目录树ansible.builtin.file:路径:“{{item}}”状态:目录with_items:-'~/.local/etc/cron.daily'-'~/.local/etc/cron.weekly'-'~/.local/etc/cron.monthly'-'~/.var/spool/anacron'这个语法看起来有点奇怪,但它实际上是一个循环。with_items:指令定义了四个要创建的目录,Ansible为ansible.buildin.file:指令中的每个目录迭代一次(目录名称由{{item}}变量填充)。与Ansible中的所有内容一样,如果目录已经存在,则不会出现错误或冲突。使用Ansible复制文件ansible.buildin.copy模块将文件从一个地方复制到另一个地方。为了让它工作,我需要创建一个名为anacrontab的文件。它不是Ansible剧本,所以我将它放在我的~/Ansible/data目录中,我的剧本的支持文件所在的目录。-名称:将anacrontab复制到适当的位置ansible.builtin.copy:src:~/Ansible/data/anacrontabdest:~/.local/etc/anacrontabmode:'0755'我的anacrontab文件很简单,模仿了一些发行版的默认文件/etc/anacron:SHELL=/bin/shPATH=/sbin:/bin:/usr/sbin:/usr/bin10cron.dayrun-parts$HOME/.local/etc/cron.daily/70cron.wekrun-parts$HOME/.local/etc/cron.weekly/300cron.monrun-parts$HOME/.local/etc/cron.monthly/在大多数Linux发行版上登录时运行anacron配置anacron以从中读取作业/etc/anacron.我主要以普通用户身份使用anacron,所以我从我的登录~/.profile启动anacron。我不想自己记住这些配置,所以我让Ansible来做。我使用ansible.buildin.lineinfile模块,它创建~/.profile如果它不存在,并插入anacron的启动行。-名称:将本地anacrontab添加到.profileansible.builtin.lineinfile:path:~/.profileregexp:'^/usr/sbin/anacron'line:'/usr/sbin/anacron-t~/.local/etc/anacrontab'create:true使用Ansible安装anacron对于我的大多数系统,dnf模块可用于安装软件包,但我的工作站运行的是Slackware(使用slackpkg),有时不同的Linux发行版会成为我的最爱。undefined
