Gibt es einen Befehl oder ein vorhandenes Skript, mit dem ich alle geplanten Cron-Jobs eines * NIX-Systems gleichzeitig anzeigen kann? Ich möchte es alle Benutzer crontabs enthalten, sowie /etc/crontab
, und was ist in /etc/cron.d
. Es wäre auch schön zu sehen, welche spezifischen Befehle von run-parts
in ausgeführt werden /etc/crontab
.
Idealerweise möchte ich die Ausgabe in einer schönen Spaltenform und auf sinnvolle Weise sortieren.
Ich könnte diese Einträge dann von mehreren Servern zusammenführen, um den gesamten "Zeitplan der Ereignisse" anzuzeigen.
Ich wollte gerade selbst ein solches Skript schreiben, aber wenn sich schon jemand die Mühe gemacht hat ...
Antworten:
Sie müssten dies als root ausführen, aber:
wird jeden Benutzernamen durchlaufen, der die Crontab auflistet. Die Crontabs gehören den jeweiligen Benutzern, sodass Sie die Crontab eines anderen Benutzers nicht sehen können, ohne sie oder root zu sein.
Bearbeiten Sie, wenn Sie wissen möchten, zu welchem Benutzer eine Crontab gehört
echo $user
quelle
for user in $(getent passwd | cut -f1 -d: ); do echo $user; crontab -u $user -l; done
for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l 2>/dev/null | grep -v '^#'; done
for user in $(getent passwd | awk -F : '{print $1}'); do echo $user; crontab -u $user -l; done
/etc/cron.hourly/
,/etc/cron.daily/
,/etc/cron.weekly/
,/etc/cron.monthly/
...?Am Ende habe ich ein Skript geschrieben (ich versuche mir die Feinheiten des Bash-Skripts beizubringen, deshalb sehen Sie hier so etwas wie Perl nicht). Es ist nicht gerade eine einfache Angelegenheit, aber es macht das meiste, was ich brauche. Es nutzt Kyle Vorschlag für einzelne Benutzer crontabs aufzublicken, sondern befasst sich auch mit
/etc/crontab
(einschließlich der Start - Skripte vonrun-parts
in/etc/cron.hourly
,/etc/cron.daily
usw.) und die Arbeitsplätze im/etc/cron.d
Verzeichnis. Es nimmt all diese und führt sie zu einer Anzeige wie der folgenden zusammen:Beachten Sie, dass es den Benutzer anzeigt und mehr oder weniger nach Stunde und Minute sortiert, damit ich den Tagesplan sehen kann.
Bisher habe ich es auf Ubuntu, Debian und Red Hat AS getestet.
quelle
<' showcrons.sh: line 59:
erledigt << (cut --fields = 1 --delimiter =: / etc / passwd) '/etc/anacrontab
Unter Ubuntu oder Debian können Sie crontab von anzeigen,
/var/spool/cron/crontabs/
und dann befindet sich dort eine Datei für jeden Benutzer. Das gilt natürlich nur für benutzerspezifische Crontab's.Für Redhat 6/7 und Centos ist die Crontab unter
/var/spool/cron/
.quelle
/etc/passwd
. IMO sollte dies die akzeptierte Antwort sein und nicht alle Brute-Force-Lösungen.Dies zeigt alle Crontab-Einträge aller Benutzer an.
quelle
Hängt von deiner Linux-Version ab, aber ich benutze:
als Wurzel. Sehr einfach und sehr kurz.
Gibt mir Ausgabe wie:
quelle
tail -n +1 /var/spool/cron/*
diese Option, um den gesamten Inhalt der Dateien aufzulisten.sudo sh -c 'tail -n +1 /var/spool/cron/*'
wenn du nicht root werden willst. Meine OCD zwang mich zu untersuchen, warum ich diesen Befehl nicht wie geschrieben ausführen konnte. Dies lag daran, dass reguläre Benutzer keinen Zugriff auf / var / spool / cron dir haben und der Glob als wörtliches Sternzeichen interpretiert wurde, das offensichtlich nicht existiert.cd /var/spool/cron/cron/ && grep . *
wird auch der entsprechende Benutzername vor jedem Cron-JobEine kleine Verfeinerung von Kyle Burtons Antwort mit verbesserter Ausgabeformatierung:
quelle
Dadurch wird vermieden, dass Sie direkt mit passwd herumspielen, Benutzer überspringen, die keine Cron-Einträge haben, und für diejenigen, die sie haben, werden der Benutzername sowie deren Crontab ausgedruckt.
Meistens hier, damit ich es später finden kann, falls ich jemals wieder danach suchen muss.
quelle
/etc/passwd
. Die obige Lösung von Matt ist für diese spezielle Situation besser geeignet, aber es ist gut zu wissen, dass der Befehl vorhanden ist.Wenn Sie einen Cluster mit NIS überprüfen, können Sie nur anhand von Matts Antwort / var / spool / cron / tabs feststellen, ob ein Benutzer einen Crontab-Eintrag hat.
quelle
Um eine Liste vom ROOT-Benutzer zu erhalten.
quelle
Dieses Skript hat in CentOS für mich funktioniert, um alle Cron in der Umgebung aufzulisten:
quelle
cat /etc/passwd | sed 's/^\([^:]*\):.*$/echo "\ncrontab for \1:"; sudo crontab -u \1 -l 2>\&1/' | grep -v "no crontab for" | sh
Ich mag die einfache Einzeiler-Antwort oben:
Solaris, das nicht über das Flag -u verfügt und den zu überprüfenden Benutzer nicht druckt, kann wie folgt geändert werden:
Sie erhalten eine Liste der Benutzer ohne die von crontab ausgelösten Fehler, wenn ein Konto cron usw. nicht verwenden darf. Beachten Sie, dass sich Rollen in Solaris auch in / etc / passwd befinden können (siehe / etc / user_attr).
quelle
quelle
Im Folgenden werden Kommentare, Leerzeilen und Fehler von Benutzern ohne Crontab entfernt. Sie haben nur noch eine übersichtliche Liste der Benutzer und ihrer Jobs.
Beachten Sie die Verwendung von
sudo
in der 2. Zeile. Wenn Sie bereits root sind, entfernen Sie das.Beispielausgabe:
Ich benutze dies auf Ubuntu (12 bis 16) und Red Hat (5 bis 7).
quelle
Hängt von Ihrer Version von cron ab. Mit Vixie cron unter FreeBSD kann ich Folgendes tun:
Wenn ich möchte, dass mehr Tabs entfernt werden, kann ich Folgendes tun:
Wo das eine wörtliche Registerkarte im sed Ersatzteil ist.
Es kann systemunabhängiger sein, die Benutzer zu durchlaufen
/etc/passwd
undcrontab -l -u $user
für jeden von ihnen zu tun .quelle
Vielen Dank für dieses sehr nützliche Skript. Ich hatte einige winzige Probleme beim Ausführen auf alten Systemen (Red Hat Enterprise 3, die unterschiedliche egrep und Tabs in Zeichenfolgen verarbeiten) und anderen Systemen mit nichts in /etc/cron.d/ (das Skript endete dann mit einem Fehler). Hier ist ein Patch, mit dem es in solchen Fällen funktioniert:
Ich bin mir nicht sicher, ob die Änderungen im ersten egrep eine gute Idee sind, aber dieses Skript wurde problemlos auf RHEL3,4,5 und Debian5 getestet. Hoffe das hilft!
quelle
Aufbauend auf @Kyle
um die Kommentare zu vermeiden, die normalerweise oben in / etc / passwd stehen,
Und auf Macosx
quelle
grep -v '^#
auf eine magische Zahl verlassen11
?Ich denke, ein besserer Einzeiler wäre unten. Wenn Sie beispielsweise Benutzer in NIS oder LDAP haben, befinden sich diese nicht in / etc / passwd. Dadurch erhalten Sie die Crontabs aller Benutzer, die sich angemeldet haben.
quelle
Sie können für alle Benutzerlisten schreiben:
Sie können auch gehen
Diese Datei listet die Zeitpläne auf
quelle
Mit Entschuldigung und Dank an Yukondude.
Ich habe versucht, die Timing-Einstellungen für ein einfaches Lesen zusammenzufassen, obwohl es kein perfekter Job ist, und ich berühre nicht "jeden Freitag" oder "nur montags".
Dies ist Version 10 - jetzt:
Ich veröffentliche das Skript jetzt vollständig hier.
https://gist.github.com/myshkin-uk/d667116d3e2d689f23f18f6cd3c71107
quelle
Da es darum geht, eine Datei (
/etc/passwd
) zu durchlaufen und eine Aktion auszuführen, fehlt mir der richtige Ansatz, wie ich eine Datei (Datenstrom, Variable) Zeile für Zeile (und / oder Feld für Feld) lesen kann )? ::Dies liest
/etc/passwd
Zeile für Zeile unter Verwendung:
als Feldtrennzeichen. Indemread -r user _
wir sagen ,$user
halten wir das erste Feld und_
den Rest fest (es ist nur eine Junk-Variable, um Felder zu ignorieren).Auf diese Weise können wir dann
crontab -u
die Variable aufrufen$user
, die wir aus Sicherheitsgründen zitieren (was ist, wenn sie Leerzeichen enthält? In einer solchen Datei ist dies unwahrscheinlich, aber Sie können es nie erfahren).quelle
Unter Solaris für einen bestimmten bekannten Benutzernamen:
Alle anderen * Nix benötigen
-u
Modifikator:So erhalten Sie alle Jobs eines Benutzers gleichzeitig in Solaris, ähnlich wie in anderen oben genannten Beiträgen:
quelle
Für mich ist ein Blick auf / var / spool / cron / crontabs der beste Weg
quelle
Dieses Skript gibt die Crontab in eine Datei aus und listet auch alle Benutzer auf, die diejenigen bestätigen, die keinen Crontab-Eintrag haben:
quelle