Advertisements

Wie ich Ansible und anacron für die Automatisierung verwende

Automatisierung ist das ideale 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 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

Mein bevorzugtes einfaches Automatisierungstool war früher das Cron-System – alt, zuverlässig, benutzerorientiert und (abgesehen von einer Planungssyntax, die ich nie in den Speicher festlegen kann) einfach. Das Problem mit cron besteht jedoch darin, dass davon ausgegangen wird, dass ein Computer jeden Tag 24 Stunden am Tag eingeschaltet ist. Nachdem ich zu viele geplante Backups verpasst hatte, entdeckte ich anacron, das Cron-System, das auf Zeitstempeln und nicht auf geplanten Zeiten basiert. Wenn Ihr Computer ausgeschaltet ist, während 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 eines von drei Verzeichnissen: cron.daily, cron.weekly, oder cron.monthly (Sie können mehr definieren, wenn Sie möchten). Mit anacron setze ich Skripte und Ansible-Playbooks für alle möglichen trivialen Aufgaben ein, einschließlich Pop-up-Erinnerungen an bevorstehende Fälligkeitstermine oder Ereignisse.

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 Standard-Ansible-Boilerplate:

---
- hosts
: localhost
  tasks:

Verzeichnisse erstellen mit Ansible

Als nächstes erstelle ich den Verzeichnisbaum, den ich für Anacron verwende. Sie können sich dies als eine Art transparente 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 davon mag etwas seltsam erscheinen, aber es ist eigentlich eine Schleife. Die with_items: Direktive definiert vier zu erstellende Verzeichnisse und Ansible iteriert über die ansible.builtin.file: -Anweisung 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 funktioniert, musste ich eine Datei namens . erstellen anacrontab. Es ist kein Ansible-Playbook, also behalte ich es in meinem ~/Ansible/data Verzeichnis, in dem ich Support-Dateien für meine Playbooks aufbewahre.

    - 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 Datei nach, in der einige Distributionen standardmäßig installiert sind /etc/anacron:

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/

Ausführen von Anacron bei der Anmeldung

Die meisten Linux-Distributionen konfigurieren anacron zum Lesen von Jobs aus /etc/anacron. Ich benutze Anacron meistens als normaler Benutzer, also starte ich Anacron von meinem Login aus ~/.profile. Ich möchte nicht daran denken müssen, das selbst zu konfigurieren, also lasse ich Ansible es tun. Ich verwende das ansible.builtin.lineinfile Modul, das erstellt ~/.profile falls noch nicht vorhanden, 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 die dnf Modul würde für die Paketinstallation funktionieren, aber meine Workstation führt Slackware aus (die verwendet slackpkg) und manchmal kommt eine andere Linux-Distribution in meine Sammlung. Die ansible.builtin.package Das Modul bietet eine generische Schnittstelle zur Paketinstallation, daher verwende ich es für dieses Playbook. Zum Glück habe ich kein Repo mit Namen gefunden anacron alles andere als anacron, also muss ich vorerst keine potenziellen Unterschiede in den Paketnamen berücksichtigen.

Dies ist eigentlich ein separates Spiel, da die Paketinstallation eine Rechteeskalation erfordert, die von der . bereitgestellt wird becomes: true Richtlinie.

- hosts: localhost
  become
: true
  tasks
:
    - name
: install anacron
      ansible.builtin.package
:
        name
: anacron
        state
: present

Verwendung von Anacron und Ansible für eine einfache Automatisierung

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 eine triviale, aber sich wiederholende Aufgabe auszuführen, und sie in kopieren ~/.local/etc/cron.daily um es einmal täglich (oder ungefähr) automatisch ausführen zu lassen. Ich schreibe auch Ansible-Playbooks für Aufgaben wie das Aufräumen meines Download-Ordners. Ich lege meine Playbooks in ~/Ansible, dort bewahre ich meine Ansible-Spiele auf und erstelle dann ein Shell-Skript in ~/.local/etc/cron.daily das Stück auszuführen. Es ist einfach, schmerzlos und wird schnell zur zweiten Natur.

Wie ich Ansible und anacron für die Automatisierung verwende

Leave a Reply

Your email address will not be published. Required fields are marked *

Scroll to top