服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Linux - 我如何使用 Ansible 和 anacron 实现自动化

我如何使用 Ansible 和 anacron 实现自动化

2021-10-14 21:37Linux中国Seth Kenlon Linux

有了 anacron,我可以把脚本和 Ansible 剧本放到合适的地方,以完成各种琐碎的任务。

我如何使用 Ansible 和 anacron 实现自动化

有了 anacron,我可以把脚本和 Ansible 剧本放到合适的地方,以完成各种琐碎的任务。

自动化是伟大的 IT 和 DevOps 理想,但根据我的经验,可能根本不存在什么不方便的东西。有很多次,我为某些任务想出了一个很好的解决方案,我甚至会编写脚本,但我没有让它真正实现自动化,因为在我工作的机器上不存在易于自动化的基础设施。

我最喜欢的简易自动化工具曾经是 cron 系统,它古老、可靠、面向用户,而且简单(除了一个我永远无法记住的调度语法之外)。然而,cron 的问题是,它假定一台电脑每天 24 小时都在工作。在错过了太多预定的备份之后,我发现了 anacron,一个基于时间戳而非预定时间的 cron 系统。如果你的电脑在通常情况下运行时处于关闭状态,anacron 会确保它在电脑重新开启时运行。创建一个作业只需要简单地把一个 shell 脚本放到三个目录中:cron.daycron.weekly 或者 cron.monthly (如果你想的话,你可以定义更多)。有了 anacron,我发现自己把脚本和 Ansible 剧本用在了各种琐碎的任务中,包括弹出到期和事件提醒。

这是一个现代问题的简单而明显的解决方案,但如果 anacron 没有安装在电脑上,那它对我就没有用。

用 Ansible 进行软件设置

任何时候我设置一台新的计算机,无论是笔记本电脑、工作站还是服务器,我都会安装 anacron。这很简单,但是 anacron 的安装只提供了 anacron 命令。它并没有设置 anacron 的用户环境。所以我创建了一个 Ansible 剧本来设置用户需要什么来使用 anacron 并安装 anacron 命令。

首先,标准的 Ansible 模板:

  1. ---
  2. - hosts: localhost
  3. tasks:

用 Ansible 创建目录

接下来,我创建了用于 Anacron 的目录树。你可以把它看成是一种透明的 crontab。

  1. - name: create directory tree
  2. ansible.builtin.file:
  3. path: "{{ item }}"
  4. state: directory
  5. with_items:
  6. - '~/.local/etc/cron.daily'
  7. - '~/.local/etc/cron.weekly'
  8. - '~/.local/etc/cron.monthly'
  9. - '~/.var/spool/anacron'

这个语法可能看起来有点奇怪,但它实际上是一个循环。with_items: 指令定义了四个要创建的目录,Ansible 在 ansible.buildin.file: 指令中为每个目录迭代一次(目录名填充了 {{ item }} 变量)。与 Ansible 中的一切一样,如果目录已经存在,不会有错误或冲突。

用 Ansible 复制文件

ansible.buildin.copy 模块将文件从一个地方复制到另一个地方。为了让它工作,我需要创建一个叫做 anacrontab 的文件。它不是 Ansible 剧本,所以我把它放在我的 ~/Ansible/data 目录下,那里是我的剧本的支持文件。

  1. - name: copy anacrontab into place
  2. ansible.builtin.copy:
  3. src: ~/Ansible/data/anacrontab
  4. dest: ~/.local/etc/anacrontab
  5. mode: '0755'

我的 anacrontab 文件很简单,模仿了一些发行版默认安装在 /etc/anacron 中的文件:

  1. SHELL=/bin/sh
  2. PATH=/sbin:/bin:/usr/sbin:/usr/bin
  3. 1 0 cron.day run-parts $HOME/.local/etc/cron.daily/
  4. 7 0 cron.wek run-parts $HOME/.local/etc/cron.weekly/
  5. 30 0 cron.mon run-parts $HOME/.local/etc/cron.monthly/

登录时运行 anacron

大多数 Linux 发行版将 anacron 配置为从 /etc/anacron 读取作业。我主要是作为一个普通用户使用 anacron,所以我从我的登录账号 ~/.profile 启动 anacron。我不想让自己记住这些配置,所以我让 Ansible 来做。我使用 ansible.buildin.lineinfile 模块,它会在 ~/.profile 不存在时创建它,并插入 anacron 的启动行。

  1. - name: add local anacrontab to .profile
  2. ansible.builtin.lineinfile:
  3. path: ~/.profile
  4. regexp: '^/usr/sbin/anacron'
  5. line: '/usr/sbin/anacron -t ~/.local/etc/anacrontab'
  6. create: true

用 Ansible 安装 anacron

对于我的大多数系统来说,dnf 模块可以用来安装软件包,但我的工作站运行的是 Slackware(使用 slackpkg),有时不同的 Linux 发行版也会进入我的收藏。ansible.buildin.package 模块提供了一个安装软件包的通用接口,所以我把它用在这个剧本上。幸运的是,我还没有遇到一个名为 anacron 的仓库不是 anacron,所以现在,我不必考虑软件包名称的潜在差异。

这实际上是一个单独的剧本,因为软件包的安装需要权限升级,它由 becomes: true 指令提供。

  1. - hosts: localhost
  2. become: true
  3. tasks:
  4. - name: install anacron
  5. ansible.builtin.package:
  6. name: anacron
  7. state: present

使用 anacron 和 Ansible 实现轻松自动化

为了用 Ansible 安装 anacron,我运行该剧本:

  1. $ ansible-playbook ~/Ansible/setup-anacron.yaml

从此,我就可以编写 shell 脚本来执行一些琐碎但重复的任务,然后把它复制到 ~/.local/etc/cron.daily,让它每天自动运行一次(或者大约如此)。我还为诸如 清理下载文件夹 之类的任务编写了 Ansible 剧本。我把我的剧本放在 ~/Ansible 里,这是我保存 Ansible 剧本的地方,然后在 ~/.local/etc/cron.daily 里创建一个 shell 脚本来执行这个剧本。这很简单,不费吹灰之力,而且很快成为习惯。

原文链接:https://linux.cn/article-13879-1.html

延伸 · 阅读

精彩推荐
  • LinuxLinux lnmp下无法使用mail发邮件的两种解决方法

    Linux lnmp下无法使用mail发邮件的两种解决方法

    在配置了lnmp环境后,出现了mail函数不能发送邮件的问题,其实有两种方法,一是使用sendmail组件,而是使用postfix。下面为大家一一介绍下 ...

    Linux之家4042019-09-17
  • LinuxLinux中环境变量配置的步骤详解

    Linux中环境变量配置的步骤详解

    Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的...

    Myths7882022-02-10
  • LinuxLinux上设置用户通过SFTP访问目录的权限的方法

    Linux上设置用户通过SFTP访问目录的权限的方法

    这篇文章主要介绍了Linux上设置用户通过SFTP访问目录的权限的方法,SFTP可以理解为使用SSH协议进行FTP传输的协议,因而同时要对OpenSSH进行相关设置,需要的朋...

    OSChina10022019-06-19
  • LinuxLinux常用的日志文件和常用命令

    Linux常用的日志文件和常用命令

    成功地管理任何系统的关键之一,是要知道系统中正在发生什么事。 Linux 中提供了异常日志,并且日志的细节是可配置的。Linux 日志都以明文形式存储,所...

    Linux教程网2632020-04-18
  • Linuxlinux中rmdir命令使用详解(删除空目录)

    linux中rmdir命令使用详解(删除空目录)

    今天学习一下linux中命令: rmdir命令。rmdir是常用的命令,该命令的功能是删除空目录,一个目录被删除之前必须是空的 ...

    linux命令大全5372019-11-19
  • Linux详解Linux系统下PXE服务器的部署过程

    详解Linux系统下PXE服务器的部署过程

    这篇文章主要介绍了Linux系统下PXE服务器的部署过程,包括对PXE的API架构作了一个基本的简介,需要的朋友可以参考下...

    运维之道9812019-07-04
  • Linux确保Linux系统安全的前提条件 漏洞防护

    确保Linux系统安全的前提条件 漏洞防护

    Linux 作为开放式的操作系统受到很多程序员的喜爱,很多高级程序员都喜欢编写Linux操作系统的相关软件。这使得Linux操作系统有着丰富的软件支持,还有无...

    Linux之家2642020-04-11
  • Linux手把手教您在 Linux 上使用 GPG 加解密文件

    手把手教您在 Linux 上使用 GPG 加解密文件

    在本教程中,我将告诉你如何用 GPG 加密和解密文件。这是一个简单的教程,你可以在你的 Linux 系统上尝试所有的练习。这将帮助你练习 GPG 命令,并在你...

    Linux中国6962021-12-15