Automatisierung ist das große IT- und DevOps-Ideal, aber meiner Erfahrung nach kann alles, was nicht sofort bequem ist, auch gar nicht existieren. Es gab viele Male, in denen ich eine ziemlich gute Lösung für eine Aufgabe gefunden habe, und ich werde sie sogar skripten, aber ich höre damit auf, sie buchstäblich zu automatisieren, weil die Infrastruktur für eine einfache Automatisierung auf der Maschine nicht vorhanden ist Ich arbeite an.
Mehr zu Ansible
- Eine Schnellstartanleitung für Ansible
- Ansible-Spickzettel
- Kostenloser Online-Kurs:Grundlagen von Ansible
- Ansible herunterladen und installieren
- eBook:Das automatisierte Unternehmen
- eBook:Ansible für DevOps
- Kostenlose Ansible-eBooks
- Neueste Ansible-Artikel
Mein bevorzugtes einfaches Automatisierungstool war früher das Cron-System – alt, zuverlässig, benutzerfreundlich und (abgesehen von einer Planungssyntax, die ich mir nie merken kann) einfach. Das Problem mit cron ist jedoch, dass davon ausgegangen wird, dass ein Computer jeden Tag rund um die Uhr eingeschaltet ist. Nachdem ich zu viele geplante Backups verpasst hatte, entdeckte ich Anacron, das Cron-System, das eher auf Zeitstempeln als auf geplanten Zeiten basiert. Wenn Ihr Computer ausgeschaltet ist, wenn ein Job normalerweise ausgeführt worden wäre, stellt anacron sicher, dass er ausgeführt wird, wenn der Computer wieder eingeschaltet ist. Das Erstellen eines Jobs ist so einfach wie das Ablegen eines Shell-Skripts in einem der drei Verzeichnisse:cron.daily
, cron.weekly
, oder cron.monthly
(Sie können mehr definieren, wenn Sie möchten). Mit anacron stelle ich fest, dass ich Skripte und Ansible-Playbooks für alle möglichen trivialen Aufgaben, einschließlich Pop-up-Erinnerungen an bevorstehende Fälligkeiten oder Ereignisse, an Ort und Stelle ablege.
Es ist eine einfache und offensichtliche Lösung für ein modernes Problem, aber es nützt mir nichts, wenn anacron nicht auf dem Computer installiert ist.
Software-Setup mit Ansible
Jedes Mal, wenn ich einen neuen Computer einrichte, sei es ein Laptop, eine Workstation oder ein Server, installiere ich anacron. Das ist einfach, aber eine Anacron-Installation bietet nur den Anacron-Befehl. Es richtet nicht die anacron-Benutzerumgebung ein. Also habe ich ein Ansible-Playbook erstellt, um einzurichten, was der Benutzer benötigt, um Anacron zu verwenden und den Anacron-Befehl zu installieren.
Zuerst die standardmäßige Ansible-Boilerplate:
---
- hosts: localhost
tasks:
Verzeichnisse mit Ansible erstellen
Als nächstes erstelle ich den Verzeichnisbaum, den ich für Anacron verwende. Sie können sich das als eine Art transparentes Crontab vorstellen.
- name: create directory tree
ansible.builtin.file:
path: "{{ item }}"
state: directory
with_items:
- '~/.local/etc/cron.daily'
- '~/.local/etc/cron.weekly'
- '~/.local/etc/cron.monthly'
- '~/.var/spool/anacron'
Die Syntax mag etwas seltsam erscheinen, aber es ist eigentlich eine Schleife. Der with_items:
-Direktive definiert vier zu erstellende Verzeichnisse, und Ansible iteriert über ansible.builtin.file:
Direktive einmal für jedes Verzeichnis (der Verzeichnisname füllt die {{ item }}
Variable). Wie bei allem in Ansible gibt es keinen Fehler oder Konflikt, wenn das Verzeichnis bereits existiert.
Kopieren von Dateien mit Ansible
Die ansible.builtin.copy
Modul kopiert Dateien von einem Ort zum anderen. Damit dies funktionierte, musste ich eine Datei namens anacrontab
erstellen . Es ist kein Ansible-Playbook, also bewahre ich es in meinem ~/Ansible/data
auf Verzeichnis, in dem ich Support-Dateien für meine Playbooks bewahre.
- name: copy anacrontab into place
ansible.builtin.copy:
src: ~/Ansible/data/anacrontab
dest: ~/.local/etc/anacrontab
mode: '0755'
Mein anacrontab
Datei ist einfach und ahmt die nach, die einige Distributionen standardmäßig in /etc/anacron
installieren :
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
1 0 cron.day run-parts $HOME/.local/etc/cron.daily/
7 0 cron.wek run-parts $HOME/.local/etc/cron.weekly/
30 0 cron.mon run-parts $HOME/.local/etc/cron.monthly/
Anacron wird beim Login ausgeführt
Die meisten Linux-Distributionen konfigurieren anacron so, dass Jobs aus /etc/anacron
gelesen werden . Ich verwende anacron meistens als normaler Benutzer, also starte ich anacron von meinem Login ~/.profile
. Ich möchte nicht daran denken müssen, das selbst zu konfigurieren, also lasse ich es von Ansible erledigen. Ich verwende die ansible.builtin.lineinfile
Modul, das ~/.profile
erstellt falls es noch nicht existiert und fügt die Anacron-Startzeile ein.
- name: add local anacrontab to .profile
ansible.builtin.lineinfile:
path: ~/.profile
regexp: '^/usr/sbin/anacron'
line: '/usr/sbin/anacron -t ~/.local/etc/anacrontab'
create: true
Anacron mit Ansible installieren
Für die meisten meiner Systeme ist der dnf
-Modul für die Paketinstallation funktionieren würde, aber auf meiner Workstation läuft Slackware (die slackpkg
verwendet ), und manchmal kommt eine andere Linux-Distribution in meine Sammlung. Das ansible.builtin.package
-Modul bietet eine generische Schnittstelle zur Paketinstallation, daher verwende ich es für dieses Playbook. Glücklicherweise ist mir noch kein Repo mit dem Namen anacron
begegnet alles außer anacron
, also muss ich vorerst keine möglichen Unterschiede in den Paketnamen berücksichtigen.
Dies ist eigentlich ein separates Spiel, da die Paketinstallation eine Rechteausweitung erfordert, die durch becomes: true
bereitgestellt wird Richtlinie.
- hosts: localhost
become: true
tasks:
- name: install anacron
ansible.builtin.package:
name: anacron
state: present
Anacron und Ansible für einfache Automatisierung verwenden
Um Anacron mit Ansible zu installieren, führe ich das Playbook aus:
$ ansible-playbook ~/Ansible/setup-anacron.yaml
Von da an kann ich Shell-Skripte schreiben, um einige triviale, aber sich wiederholende Aufgaben auszuführen, und sie in ~/.local/etc/cron.daily
kopieren um es automatisch einmal am Tag (oder so ungefähr) laufen zu lassen. Ich schreibe auch Ansible-Playbooks für Aufgaben wie das Aufräumen meines Download-Ordners. Ich platziere meine Playbooks in ~/Ansible
, wo ich meine Ansible-Spiele aufbewahre, und erstelle dann ein Shell-Skript in ~/.local/etc/cron.daily
um das Stück auszuführen. Es ist einfach, schmerzlos und wird schnell zur zweiten Natur.