Jak mogę uzyskać listę wszystkich zaplanowanych zadań cron na moim komputerze?

201

Mój sysadmin skonfigurował kilka zadań cron na moim komputerze. Chciałbym dokładnie wiedzieć, co jest zaplanowane na jaki czas. Jak mogę uzyskać tę listę?

Szczery
źródło
3
To nie jest odpowiedź na pytanie, ale tylko uwaga na temat najlepszych praktyk. Jedno można skonfigurować je jako crona dla każdego użytkownika rootlub apacheczy cokolwiek, ale jedno należy użyć /etc/crontablub (lepiej, w większości dystrybucji) /etc/cron.di /etc/cron.[timeframe].
mattdm
Wysłałem skrypt, który automatyzuje to w użytecznym stopniu na: - stackoverflow.com/questions/134906/… Nie jest idealny, ale prawdopodobnie pokrywa 90% potrzeb. To dobry przykład tego, czego nie pisać w bash.
David Collier

Odpowiedzi:

143

W zależności od konfiguracji systemu Linux, możesz zajrzeć do:

  • /var/spool/cron/* (crontabs użytkownika)
  • /etc/crontab (crontab dla całego systemu)

ponadto wiele dystrybucji ma:

  • /etc/cron.d/* Te konfiguracje mają tę samą składnię co /etc/crontab

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

Są to po prostu katalogi zawierające pliki wykonywalne, które są wykonywane co godzinę, codziennie, co tydzień lub co miesiąc, według nazwy katalogu.

/var/spool/at/*Ponadto możesz mieć w pracy (czek ), anakron ( /etc/anacrontabi /var/spool/anacron/*) i prawdopodobnie inne, o których zapominam.

jsbillings
źródło
4
Dzięki, znalazłem je w /etc/cron.daily. Jak działa ten dailyplik? O której godzinie będą wykonywane codzienne zadania? Na mojej maszynie wydają się działać około południa, ale chciałbym powiedzieć mojemu administratorowi, jak zamiast tego zmienić to na północ.
Frank
5
cron.daily jest wywoływany /etc/crontabnp. w moim systemie Ubuntu to: 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )oznacza 6:25.
Kowh
cron.daily jest wywoływany z / etc / crontab również w moim systemie RHEL5, jeśli chcesz więcej punktów danych.
jsbillings
W nowszej Fedorze (i prawdopodobnie RHEL6 - jeszcze nie wyglądał), croniedemon zajmuje się tymi, którzy używają konfiguracji w /etc/anacrontab.
mattdm
Czasami też jest w /var/cronśrodku.
CMCDragonkai
135

W przypadku większości Cronów (np. Vixie-Cron - domyślny Debian / Ubuntu, Cronie - domyślny Fedora, Solaris Cron ...) otrzymujesz listę zaplanowanych zadań cron dla bieżącego użytkownika poprzez:

$ crontab -l

lub dla innego użytkownika za pośrednictwem

# crontab -l -u juser

Aby uzyskać crontabs dla wszystkich użytkowników, możesz zapętlić wszystkich użytkowników i wywołać to polecenie.

Alternatywnie możesz wyszukać pliki buforowania. Zazwyczaj są one zapisywane w /var/spool/cron, np. Dla następującego katalogu vcron

/var/spool/cron/crontabs

zawiera wszystkie skonfigurowane tabele crontab wszystkich użytkowników - z wyjątkiem użytkownika root, który jest również w stanie konfigurować zadania za pośrednictwem ogólnosystemowego crontab, który znajduje się w

/etc/crontab

W przypadku cronie (domyślnie w Fedorze / CentOS) istnieje także .dkatalog konfiguracji stylów dla zadań cron systemowych:

/etc/cron.d

(Jak zawsze .dkatalog upraszcza obsługę wpisów konfiguracji, które są częścią różnych pakietów).

Dla wygody większość dystrybucji udostępnia również katalogi, w których połączone / przechowywane skrypty są okresowo wykonywane, np .:

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

Terminowe wykonanie tych skryptów jest zwykle zarządzane za pomocą run-partswpisów w systemie crontab lub za pomocą anakronu .

W Systemd (np. W Fedorze, CentOS 7, ...) okresowe wykonywanie zadań można dodatkowo konfigurować za pomocą jednostek czasowych . Włączone timery systemowe można wyświetlić za pomocą:

$ systemctl list-timers

Pamiętaj, że użytkownicy obok root mogą mieć uruchomione systemowo instancje użytkownika, w których skonfigurowane są również liczniki czasu. Na przykład w Fedorze domyślnie uruchamiana jest instancja systemowa dla każdego zalogowanego użytkownika. Można je rozpoznać po:

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

Liczniki czasu użytkownika można wyświetlić za pomocą:

$ systemctl --user list-timers

Alternatywą dla wydania list-timerspolecenia jest wyszukiwanie plików jednostek czasowych (wzorzec *.timer:) i dowiązań symbolicznych do nich w zwykłych katalogach konfiguracji systemu i użytkownika:

$ 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

(Podobnie jak w przypadku zwykłych jednostek serwisowych, jednostka czasowa jest włączana poprzez utworzenie dowiązania symbolicznego we właściwym katalogu konfiguracji systemowej).

Zobacz też:

maxschlepzig
źródło
Nie przegłosowałem. Ale właśnie próbowałem crontab -l -u root(ponieważ te cronjobs, o których chcę wiedzieć, działają poniżej root) i mówi, że nie mam uprawnień do korzystania -u.
Frank
3
Następnie musisz wywołać go z wystarczającymi uprawnieniami - tj. Jako rootużytkownik.
maxschlepzig
2
Wciąż nieukończone - niektóre wersje zadań uruchamianych przez crona z /etc/cron.d i /etc/cron.{daily,hourly,monthly,weekly} bez programu pomocniczego wywoływanego z / etc / crontab.
mattdm
2
@maxschlepzig - ale nie zawsze. A pytanie brzmi: „jak mogę uzyskać listę wszystkich zadań cron”; odpowiedź, która brzmi „cóż, oto niektóre z nich” nie jest odpowiedzią.
mattdm
1
@maxschlepzig - cronie, jak dostarczane w Fedorze i RHEL6, nie odnoszą się do tych w /etc/crontab, lecz zamiast tego używają /etc/anacrontab. Mogę się mylić co do faktycznych implementacji, które nie odnoszą się do nich w żadnym pliku konfiguracyjnym. (Ale potem też nie głosowałem ... Po prostu mówię.)
mattdm
5

Aby wyświetlić listę wszystkich cronów dla danego użytkownika.

crontab -u nazwa użytkownika -l;

Aby wyświetlić listę wszystkich cronów dla wszystkich użytkowników

Uruchom jako superużytkownik

#!/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
źródło
1
OP prosi o listę wszystkich zadań crona.
Drav Sloan,
1
Z jakiegoś powodu, który nie pokazuje /etc/cron.d/ jobs.
jamshid
To nie działa. „brak crontab dla danych www”. ale nazwa użytkownika www-data istnieje.
mishanon,