unix - how - list daily cron jobs




Wie listet ich alle Cron-Jobs für alle Benutzer auf? (15)

Gibt es einen Befehl oder ein vorhandenes Skript, mit dem ich alle geplanten Cron-Jobs eines * NIX-Systems gleichzeitig anzeigen kann? Ich möchte, dass es alle Benutzer crontabs sowie /etc/crontab und was auch immer in /etc/cron.d . Es wäre auch schön, die spezifischen Befehle zu sehen, die von run-parts in /etc/crontab .

Im Idealfall möchte ich die Ausgabe in einer netten Spaltenform und auf eine sinnvolle Weise geordnet haben.

Ich könnte dann diese Auflistungen von mehreren Servern zusammenführen, um den gesamten "Zeitplan der Ereignisse" anzuzeigen.

Ich wollte selbst ein solches Skript schreiben, aber wenn jemand schon in Schwierigkeiten ist ...


Aufbauend auf @Kyle

for user in $(tail -n +11 /etc/passwd | cut -f1 -d:); do echo $user; crontab -u $user -l; done

um die Kommentare zu vermeiden, die normalerweise an der Spitze von / etc / passwd liegen,

Und auf Macosx

for user in $(dscl . -list /users | cut -f1 -d:); do echo $user; crontab -u $user -l; done    

Da es darum geht, eine Datei ( /etc/passwd ) /etc/passwd und eine Aktion durchzuführen, fehlt mir der richtige Ansatz, wie ich eine Datei (Datenstrom, Variable) Zeile für Zeile (und / oder Feld) lesen kann von Feld)? :

while IFS=":" read -r user _
do
   echo "crontab for user ${user}:"
   crontab -u "$user" -l
done < /etc/passwd

Dies liest zeilenweise /etc/passwd mit : als Feldtrennzeichen. Indem wir read -r user _ sagen, machen wir $user das erste Feld und _ den Rest (es ist nur eine Junk-Variable, um Felder zu ignorieren).

Auf diese Weise können wir dann crontab -u aufrufen, indem wir die Variable $user , die wir aus Sicherheitsgründen angeben (was ist, wenn sie Leerzeichen enthält? Es ist unwahrscheinlich in einer solchen Datei, aber Sie können es nie wissen).


Dies zeigt alle crontab Einträge von allen Benutzern an.

sed 's/^\([^:]*\):.*$/crontab -u \1 -l 2>\&1/' /etc/passwd | grep -v "no crontab for" | sh

Dieses Skript funktionierte für mich in CentOS, um alle Crons in der Umgebung aufzulisten:

sudo cat /etc/passwd | sed 's/^\([^:]*\):.*$/sudo crontab -u \1 -l 2>\&1/' | grep -v "no crontab for" | sh

Eine kleine Verfeinerung von Kyle Burtons Antwort mit verbesserter Ausgabeformatierung:

#!/bin/bash
for user in $(cut -f1 -d: /etc/passwd)
do echo $user && crontab -u $user -l
echo " "
done

Für mich ist / var / spool / cron / crontabs der beste Weg


Hängt von Ihrer Version von Cron ab. Mit Vixie Cron unter FreeBSD kann ich so etwas machen:

(cd /var/cron/tabs && grep -vH ^# *) 

Wenn ich möchte, dass mehr Tabulatoren angezeigt werden, könnte ich Folgendes tun:

(cd /var/cron/tabs && grep -vH ^# * | sed "s/:/      /")

Wo das eine wörtliche Registerkarte in dem sed-Ersatzabschnitt ist.

Es kann systemunabhängiger sein, die Benutzer in /etc/passwd zu durchlaufen und für jeden von ihnen den Benutzer crontab -l -u $user .


Ich denke, ein besserer Liner wäre darunter. Zum Beispiel, wenn Sie Benutzer in NIS oder LDAP haben, wären sie nicht in / etc / passwd. Dadurch erhalten Sie die Crontabs jedes angemeldeten Benutzers.

for I in `lastlog | grep -v Never | cut -f1 -d' '`; do echo $I ; crontab -l -u $I ; done

Ich mag die einfache One-Liner-Antwort oben:

für Benutzer in $ (cut -f1 -d: / etc / passwd); do crontab -u $ user -l; erledigt

Aber Solaris, das nicht über die Markierung -u verfügt und den Benutzer, den es prüft, nicht ausgibt, können Sie es wie folgt ändern:

for user in $(cut -f1 -d: /etc/passwd); do echo User:$user; crontab -l $user 2>&1 | grep -v crontab; done

Sie erhalten eine Liste von Benutzern ohne die Fehler, die von crontab geworfen werden, wenn ein Account nicht Cron benutzen darf. Beachten Sie, dass Rollen auch in / etc / passwd sein können (siehe / etc / user_attr).


Im Folgenden werden Kommentare, leere Zeilen und Fehler von Benutzern ohne crontab entfernt. Sie haben nur noch eine klare Liste der Benutzer und ihrer Jobs.

Beachten Sie die Verwendung von sudo in der 2. Zeile. Wenn du bereits root bist, entferne das.

for USER in $(cut -f1 -d: /etc/passwd); do \
USERTAB="$(sudo crontab -u "$USER" -l 2>&1)";  \
FILTERED="$(echo "$USERTAB"| grep -vE '^#|^$|no crontab for|cannot use this program')";  \
if ! test -z "$FILTERED"; then  \
echo "# ------ $(tput bold)$USER$(tput sgr0) ------";  \
echo "$FILTERED";  \
echo "";  \
fi;  \
done

Beispielausgabe:

# ------ root ------
0 */6 * * * /usr/local/bin/disk-space-notify.sh
45 3 * * * /opt/mysql-backups/mysql-backups.sh
5 7 * * * /usr/local/bin/certbot-auto renew --quiet --no-self-upgrade

# ------ sammy ------
55 * * * * wget -O - -q -t 1 https://www.example.com/cron.php > /dev/null

Ich benutze dies auf Ubuntu (12 bis 16) und Red Hat (5 bis 7).


Sie müssten dies als root ausführen, aber:

for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l; done

Schleife über jeden Benutzernamen, der ihre crontab auflistet. Die Crontabs sind Eigentum der jeweiligen Benutzer, so dass Sie die crontab eines anderen Benutzers nicht sehen können, ohne sie oder root zu sein.

Wenn Sie wissen möchten, zu welchem ​​Benutzer ein crontab gehört, verwenden Sie echo $user

for user in $(cut -f1 -d: /etc/passwd); do echo $user; crontab -u $user -l; done

Um eine Liste von ROOT Benutzer zu erhalten.

for user in $(cut -f1 -d: /etc/passwd); do echo $user; sudo crontab -u $user -l; done

Unter Ubuntu oder debian können Sie crontab mit /var/spool/cron/crontabs/ und dann befindet sich dort eine Datei für jeden Benutzer. Das gilt natürlich nur für benutzerspezifische Crontabs.


Wenn Sie einen Cluster mit NIS überprüfen, können Sie nur nach Matts Antwort / var / spool / cron / tabs sehen, ob ein Benutzer einen crontab-Eintrag besitzt.

grep -v "#" -R  /var/spool/cron/tabs

getent passwd | cut -d: -f1 | perl -e'while(<>){chomp;$l = `crontab -u $_ -l 2>/dev/null`;print "$_\n$l\n" if $l}'

Dies verhindert, dass direkt mit passwd herumgespielt wird, überspringt Benutzer, die keine Cron-Einträge haben, und für diejenigen, die sie haben, druckt sie den Benutzernamen sowie ihre Crontab aus.

Meistens fallen diese hier aber so kann ich es später für den Fall finden, dass ich jemals wieder danach suchen muss.





cron