Wie kann ich eine Liste aller geplanten Cron-Jobs auf meinem Computer abrufen?

201

Mein Systemadministrator hat eine Reihe von Cron-Jobs auf meinem Computer eingerichtet. Ich möchte genau wissen, was zu welcher Zeit geplant ist. Wie kann ich diese Liste bekommen?

Frank
quelle
3
Dies ist nicht die Antwort auf die Frage, sondern nur ein Hinweis auf bewährte Methoden. Man kann diese als pro Benutzer Cron - Jobs konfiguriert , rootoder apacheoder was auch immer, aber man sollte verwenden /etc/crontaboder (besser in den meisten Distributionen) /etc/cron.dund /etc/cron.[timeframe].
Mattdm
Ich habe ein Skript veröffentlicht, das dies in nützlichem Maße automatisiert: - stackoverflow.com/questions/134906/… Es ist nicht perfekt, deckt aber wahrscheinlich 90% der Anforderungen ab. Es ist ein gutes Beispiel dafür, was man nicht in Bash schreiben sollte.
David Collier

Antworten:

143

Abhängig davon, wie Ihr Linux-System eingerichtet ist, können Sie Folgendes überprüfen:

  • /var/spool/cron/* (Benutzer crontabs)
  • /etc/crontab (systemweite crontab)

Viele Distributionen haben auch:

  • /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 nach ihrem Verzeichnisnamen ausgeführt werden.

Darüber hinaus können Sie bei Jobs (Scheck /var/spool/at/*), Anacron ( /etc/anacrontabund /var/spool/anacron/*) und wahrscheinlich andere, die ich vergesse.

jsbillings
quelle
4
Danke, ich habe sie gefunden /etc/cron.daily. Wie funktioniert diese dailyDatei? Wann werden die täglichen Jobs ausgeführt? Auf meinem Rechner scheinen sie gegen Mittag zu laufen, aber es würde meinem Sysadmin gerne sagen, wie man das stattdessen auf Mitternacht umstellt.
Frank
5
cron.daily wird von aufgerufen /etc/crontab, zB auf meinem Ubuntu-System heißt das: 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )6:25 Uhr.
Kowh
cron.daily wird auch auf meinem RHEL5-System aus / etc / crontab aufgerufen, wenn Sie mehr Datenpunkte möchten.
jsbillings
Auf neueren Fedora-Versionen (und wahrscheinlich RHEL6 - noch nicht überprüft) croniekümmert sich der Daemon um diejenigen, die die Konfiguration in verwenden /etc/anacrontab.
Mattdm
Manchmal ist es /var/cronauch dabei.
CMCDragonkai
135

Bei den meisten Crons (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 ausführen und diesen Befehl aufrufen.

Alternativ können Sie die Spooldateien nachschlagen. In der Regel werden sie unter /var/spool/cronzB für vcron following gespeichert

/var/spool/cron/crontabs

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

/etc/crontab

Mit cronie (Standardeinstellung unter Fedora / CentOS) gibt es auch ein .dKonfigurationsverzeichnis für System-Cron-Jobs:

/etc/cron.d

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

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

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

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

Mit Systemd (zB unter Fedora, CentOS 7, ...) kann zusätzlich die periodische Jobausführung über Timer-Einheiten konfiguriert werden . Die aktivierten Systemzeitgeber können angezeigt werden über:

$ systemctl list-timers

Beachten Sie, dass Benutzer neben root möglicherweise auch systemd-Instanzen ausführen, in denen Timer konfiguriert sind. Beispielsweise wird unter Fedora standardmäßig eine systemd-Benutzerinstanz für jeden derzeit angemeldeten Benutzer gestartet. Sie können folgendermaßen erkannt werden:

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

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

$ systemctl --user list-timers

Eine Alternative zur Ausgabe des list-timersBefehls besteht darin, nach Timer-Unit-Dateien (Muster:) *.timerund symbolischen Verknüpfungen zu diesen in den üblichen System- und Benutzersystem-Konfigurationsverzeichnissen zu suchen :

$ 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 Serviceeinheiten wird eine Zeitgebereinheit durch Erstellen einer symbolischen Verknüpfung im rechten Konfigurationsverzeichnis von systemd aktiviert.)

Siehe auch:

maxschlepzig
quelle
Ich habe nicht abgelehnt. Aber ich habe es gerade versucht crontab -l -u root(weil diese Cronjobs, die ich kennenlernen möchte, unterlaufen root), und es heißt, ich habe keine Berechtigungen zum Verwenden -u.
Frank
3
Dann müssen Sie es mit genügend Berechtigungen aufrufen - also als rootBenutzer.
maxschlepzig
2
Immer noch nicht vollständig - einige Versionen von cron führen Jobs von /etc/cron.d und /etc/cron.{daily,hourly,monthly,weekly} aus, ohne dass ein Hilfsprogramm von / etc / crontab aufgerufen wird.
Mattdm
2
@maxschlepzig - aber nicht immer. Und die Frage ist: "Wie bekomme ich eine Liste aller Cron-Jobs?" Eine Antwort, die lautet "Nun, hier sind einige von ihnen", ist nicht die Antwort.
Mattdm
1
@maxschlepzig - cronie, wie in Fedora und RHEL6 ausgeliefert, beziehen sich nicht auf die in /etc/crontab, sondern verwenden /etc/anacrontab. Möglicherweise irre ich mich bei tatsächlichen Implementierungen, die in keiner Konfigurationsdatei auf diese verweisen. (Aber dann habe ich auch nicht abgelehnt ... ich sage es nur.)
mattdm
5

Zum Auflisten aller Cron für den angegebenen Benutzer.

crontab -u Benutzername -l;

Um alle Benutzer 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
Manikandan Arunachalam
quelle
1
OP fordert eine Liste aller Cronjobs an.
Drav Sloan
1
Aus irgendeinem Grund werden in /etc/cron.d/ keine Jobs angezeigt.
Jamshid
Es funktioniert nicht. msgstr "keine crontab für www - daten". aber der Benutzername www-data ist vorhanden.
Mischanon