Wie erhalte ich eine Liste aller geplanten Cron-Jobs auf meinem Rechner?

Mein Systemadministrator hat eine Reihe von Cron-Jobs auf meinem Rechner eingerichtet. Ich würde gerne genau wissen, was für welche Zeit geplant ist. Wie kann ich diese Liste erhalten?

Lösung

Je nachdem, wie Ihr Linux-System konfiguriert ist, können Sie in:

  • /var/spool/cron/* (Benutzer-Crontabs)
  • /etc/crontab (systemweite Crontab)

Außerdem haben viele Distros:

  • /etc/cron.d/* Diese Konfigurationen haben die gleiche Syntax wie /etc/crontab

  • /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly

Dies sind einfach Verzeichnisse, die ausführbare Dateien enthalten, die stündlich, täglich, wöchentlich oder monatlich ausgeführt werden, je nach Verzeichnisname.

Darüber hinaus gibt es noch at-Jobs (siehe /var/spool/at/*), anacron (/etc/anacrontab und /var/spool/anacron/*) und wahrscheinlich noch andere, die ich vergessen habe.

Kommentare (7)

Bei den meisten Cron-Programmen (z.B. Vixie-Cron - Debian/Ubuntu Standard, Cronie - Fedora Standard, Solaris Cron ...) erhalten Sie die Liste der geplanten Cron-Jobs für den aktuellen Benutzer über:

$ crontab -l

oder für einen anderen Benutzer über

# crontab -l -u juser

Um die Crontabs für alle Benutzer zu erhalten, können Sie eine Schleife über alle Benutzer ziehen und diesen Befehl aufrufen.

Alternativ können Sie die Spooldateien nachschlagen. Normalerweise sind sie unter /var/spool/cron gespeichert, z.B. für vcron folgendes Verzeichnis

/var/spool/cron/crontabs

enthält alle konfigurierten Crontabs aller Benutzer - mit Ausnahme des Root-Benutzers, der auch Jobs über die systemweite Crontab konfigurieren kann, die sich unter

/etc/crontab

Mit cronie (Standard unter Fedora/CentOS) gibt es auch ein Konfigurationsverzeichnis im Stil von .d für System-Cron-Jobs:

/etc/cron.d

(Wie immer vereinfacht das .d-Verzeichnis die Verwaltung von Konfigurationseinträgen, die Teil verschiedener Pakete sind).

Der Einfachheit halber bieten die meisten Distributionen auch Verzeichnisse an, in denen verlinkte/gespeicherte Skripte regelmäßig ausgeführt werden, z.B.:

/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly

Die rechtzeitige Ausführung dieser Skripte wird normalerweise über run-parts-Einträge in der System-Crontab oder über anacron verwaltet.

Mit Systemd (z.B. auf Fedora, CentOS 7, ...) kann die periodische Jobausführung zusätzlich über timer units konfiguriert werden. Die aktivierten System-Timer können über angezeigt werden:

$ systemctl list-timers

Beachten Sie, dass neben root auch Benutzer systemd-Instanzen laufen haben können, in denen Timer konfiguriert sind. Unter Fedora zum Beispiel wird standardmäßig für jeden Benutzer, der gerade angemeldet ist, eine systemd-Benutzerinstanz gestartet. Sie können über erkannt werden:

$ ps aux | grep 'systemd[ ]--user'

Diese Benutzer-Timer können aufgelistet werden über:

$ systemctl --user list-timers

Eine Alternative zur Eingabe des Befehls list-timers ist die Suche nach Timer-Unit-Dateien (Muster: *.timer) und symbolischen Links zu diesen in den üblichen System- und Benutzer-Systemd-Konfigurationsverzeichnissen:

$ find /usr/lib/systemd/ /etc/systemd -name '*.timer'
$ find /home '(' -path '/home/*/.local/share/systemd/user/*' \
              -o -path '/home/*/.config/systemd/*' ')' \
      -name '*.timer'  2> /dev/null

(Wie bei normalen Service-Units wird eine Timer-Unit durch Erstellen eines symbolischen Links im richtigen systemd-Konfigurationsverzeichnis aktiviert).

Siehe auch:

Kommentare (8)

Auflisten aller Crons für den angegebenen Benutzer.

crontab -u Benutzername -l;

Um alle Crons für alle Benutzer aufzulisten

Führen Sie es als Superuser aus

#!/bin/bash
#List all cron jobs for all users
for user in `cat /etc/passwd | cut -d":" -f1`;
do 
crontab -l -u $user;
done
Kommentare (3)