Come posso ottenere un elenco di tutti i lavori cron programmati sul mio computer?


201

Il mio amministratore di sistema ha impostato un sacco di lavori cron sulla mia macchina. Mi piacerebbe sapere esattamente cosa è programmato per che ora. Come posso ottenere quell'elenco?


3
Questa non è la risposta alla domanda, ma solo una nota sulle migliori pratiche. Si possono configurare questi come lavori cron per utente per rooto apachequalsiasi cosa, ma si dovrebbero usare /etc/crontabo (meglio, nella maggior parte delle distro) /etc/cron.de /etc/cron.[timeframe].
Mattdm,


Ho pubblicato uno script che lo automatizza in misura utile su: - stackoverflow.com/questions/134906/… Non è perfetto, ma probabilmente copre il 90% delle esigenze. È un buon esempio di cosa non scrivere in bash.
David Collier,

Risposte:


143

A seconda di come è configurato il tuo sistema Linux, puoi consultare:

  • /var/spool/cron/* (crontabs utente)
  • /etc/crontab (crontab a livello di sistema)

inoltre, molte distro hanno:

  • /etc/cron.d/* Queste configurazioni hanno la stessa sintassi di /etc/crontab

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

Queste sono semplicemente directory che contengono eseguibili che vengono eseguiti ogni ora, giornalmente, settimanalmente o mensilmente, in base al nome della loro directory.

Inoltre, puoi avere lavori (controllo /var/spool/at/*), anacron ( /etc/anacrontabe /var/spool/anacron/*) e probabilmente altri che sto dimenticando.


4
Grazie, li ho trovati dentro /etc/cron.daily. Come funziona quel dailyfile? A che ora verranno eseguiti i lavori quotidiani? Sulla mia macchina sembrano correre verso mezzogiorno, ma vorrebbe dire al mio amministratore di sistema come cambiarlo invece a mezzanotte.
Frank,

5
cron.daily viene chiamato /etc/crontab, ad esempio sul mio sistema Ubuntu è: 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )che significa 6:25.
Kowh,

cron.daily viene chiamato da / etc / crontab anche sul mio sistema RHEL5, se desideri più punti dati.
jsbillings,

Su Fedora più recente (e probabilmente RHEL6 - non ho ancora guardato), il croniedemone si prende cura di quelli che usano la configurazione in /etc/anacrontab.
Mattdm,

A volte è /var/cronanche dentro .
CMCDragonkai,

135

Con la maggior parte dei Crons (ad es. Vixie-Cron - Debian / Ubuntu predefinito, Cronie - Fedora predefinito, Solaris Cron ...) si ottiene l'elenco dei lavori cron programmati per l'utente corrente tramite:

$ crontab -l

o per un altro utente tramite

# crontab -l -u juser

Per ottenere i crontab per tutti gli utenti è possibile eseguire il ciclo su tutti gli utenti e chiamare questo comando.

In alternativa, puoi cercare i file di spool. Di solito, vengono salvati in /var/spool/cron, ad es. Per vcron seguente directory

/var/spool/cron/crontabs

contiene tutti i crontab configurati di tutti gli utenti, tranne l'utente root che è anche in grado di configurare i lavori tramite il crontab a livello di sistema, che si trova in

/etc/crontab

Con cronie (impostazione predefinita su Fedora / CentOS), esiste anche una .ddirectory di configurazione dello stile per i processi cron di sistema:

/etc/cron.d

(Come sempre, la .ddirectory semplifica il mantenimento delle voci di configurazione che fanno parte di pacchetti diversi.)

Per comodità, la maggior parte delle distribuzioni fornisce anche una directory in cui gli script collegati / memorizzati vengono periodicamente eseguiti, ad esempio:

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

L'esecuzione tempestiva di tali script è generalmente gestita tramite run-partsvoci nel crontab di sistema o tramite anacron .

Con Systemd (ad es. Su Fedora, CentOS 7, ...) l'esecuzione periodica dei lavori può essere configurata tramite unità timer . I timer di sistema abilitati possono essere visualizzati tramite:

$ systemctl list-timers

Si noti che gli utenti accanto a root possono avere anche istanze di systemd utente in esecuzione in cui sono configurati i timer. Ad esempio, su Fedora, per impostazione predefinita, viene avviata un'istanza di systemd utente per ciascun utente attualmente connesso. Possono essere riconosciuti tramite:

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

Questi timer utente possono essere elencati tramite:

$ systemctl --user list-timers

Un'alternativa all'emissione del list-timerscomando è la ricerca di file di unità timer (modello *.timer:) e collegamenti simbolici ad essi nelle normali directory di sistema e configurazione utente:

$ 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

(Come per le normali unità di servizio, un'unità timer viene abilitata creando un collegamento simbolico nella giusta directory di configurazione del sistema.)

Guarda anche:


Non ho votato a fondo. Ma ho appena provato crontab -l -u root(perché quei cronjob che voglio sapere su run under root), e dice che non ho privilegi da usare -u.
Frank

3
Quindi devi chiamarlo con sufficienti privilegi, ad esempio come rootutente.
maxschlepzig,

2
Ancora non completo - alcune versioni di cron eseguono i lavori da /etc/cron.d e /etc/cron.{daily,hourly ,monthly, settimanalmente} senza un programma di supporto chiamato da / etc / crontab.
Mattdm,

2
@maxschlepzig - ma non sempre. E la domanda è "come posso ottenere un elenco di tutti i lavori cron"; una risposta che è "beh, eccone alcuni" non è la risposta.
Mattdm,

1
@maxschlepzig - cronie, come spedito in Fedora e RHEL6, non si riferiscono a quelli in /etc/crontab, ma invece usano /etc/anacrontab. Potrei sbagliarmi su eventuali implementazioni reali che non si riferiscono a queste in qualsiasi file di configurazione. (Ma poi, non ho neanche votato ... sto solo dicendo.)
mattdm,

5

Per elencare tutti i croni per l'utente specificato.

crontab -u username -l;

Per elencare tutti i croni per tutti gli utenti

Eseguilo come un super utente

#!/bin/bash
#List all cron jobs for all users
for user in `cat /etc/passwd | cut -d":" -f1`;
do 
crontab -l -u $user;
done

1
OP richiede un elenco di tutti i lavori cron.
Drav Sloan,

1
Per qualche motivo che non mostra /etc/cron.d/ jobs.
jamshid,

La sua non funziona. "nessun crontab per i dati www". ma il nome utente www-data esiste.
Mishanon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.