998 Stimmen

Wie kann ich alle Cron-Jobs für alle Benutzer auflisten?

Gibt es einen Befehl oder ein vorhandenes Skript, mit dem ich alle geplanten Cron-Jobs eines *NIX-Systems auf einmal sehen kann? Ich möchte, dass es alle Benutzer-Crontabs einschließt, ebenso wie /etc/crontab und was auch immer in /etc/cron.d . Es wäre auch schön, wenn man die spezifischen Befehle sehen könnte, die von run-parts sur /etc/crontab .

Im Idealfall hätte ich die Ausgabe gerne in einer schönen Spaltenform und in einer sinnvollen Reihenfolge.

Ich könnte dann diese Auflistungen von mehreren Servern zusammenführen, um den gesamten "Veranstaltungskalender" zu sehen.

Ich wollte selbst ein solches Drehbuch schreiben, aber wenn sich schon jemand die Mühe gemacht hat...

7voto

rkoots Punkte 369

Können Sie für alle Benutzerlisten schreiben:

sudo crontab -u userName -l

,

Sie können auch gehen zu

cd /etc/cron.daily/
ls -l
cat filename

diese Datei listet die Zeitpläne auf

cd /etc/cron.d/
ls -l
cat filename

7voto

armagedescu Punkte 1456

Unter Solaris für einen bestimmten bekannten Benutzernamen:

crontab -l username

Um alle Jobs eines Benutzers auf einmal auf Solaris zu erhalten, ähnlich wie in anderen Beiträgen oben:

for user in $(cut -f1 -d: /etc/passwd); do crontab -l $user 2>/dev/null; done

Aktualisieren: Bitte hören Sie auf, Bearbeitungen vorzuschlagen, die auf Solaris falsch sind: enter image description here

6voto

Daniel Papasian Punkte 15817

Hängt von der Version von cron ab. Wenn ich Vixie cron unter FreeBSD verwende, kann ich etwa so vorgehen:

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

Wenn ich mehr Tabs haben möchte, könnte ich so etwas machen:

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

Dabei handelt es sich um einen wörtlichen Tabulator im sed-Ersatzteil.

Es kann systemunabhängiger sein, die Benutzer in einer Schleife durch die /etc/passwd und tun crontab -l -u $user für jeden von ihnen.

5voto

jbbarth Punkte 702

Vielen Dank für dieses sehr nützliche Skript. Ich hatte ein paar kleine Probleme, es auf alten Systemen (Red Hat Enterprise 3, die egrep und Tabs in Strings anders handhaben) und anderen Systemen mit nichts in /etc/cron.d/ auszuführen (das Skript endete dann mit einem Fehler). Hier ist also ein Patch, der es in solchen Fällen zum Laufen bringt:

2a3,4
> #See:  http://stackoverflow.com/questions/134906/how-do-i-list-all-cron-jobs-for-all-users
>
27c29,30
<         match=$(echo "${line}" | egrep -o 'run-parts (-{1,2}\S+ )*\S+')
---
>         #match=$(echo "${line}" | egrep -o 'run-parts (-{1,2}\S+ )*\S+')
>         match=$(echo "${line}" | egrep -o 'run-parts.*')
51c54,57
< cat "${CRONDIR}"/* | clean_cron_lines >>"${temp}"  # */ <not a comment>
---
> sys_cron_num=$(ls /etc/cron.d | wc -l | awk '{print $1}')
> if [ "$sys_cron_num" != 0 ]; then
>       cat "${CRONDIR}"/* | clean_cron_lines >>"${temp}"  # */ <not a comment>
> fi
67c73
<     sed "1i\mi\th\td\tm\tw\tuser\tcommand" |
---
>     sed "1i\mi${tab}h${tab}d${tab}m${tab}w${tab}user${tab}command" |

Ich bin mir nicht sicher, ob die Änderungen im ersten egrep eine gute Idee sind, aber gut, dieses Skript wurde auf RHEL3,4,5 und Debian5 ohne Probleme getestet. Hoffentlich hilft das!

4voto

Monte Punkte 41

Ich denke, ein besserer Einzeiler wäre der folgende. Wenn Sie zum Beispiel Benutzer in NIS oder LDAP haben, sind diese nicht in /etc/passwd. So erhalten Sie die Crontabs aller Benutzer, die sich angemeldet haben.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X