Dove è memorizzato l'utente crontab?


249

Da quando ho aggiornato il crontab del mio utente è stato cancellato. Non è la prima volta che succede quest'anno ed è un dolore ripristinarlo ogni volta.

Mi piacerebbe essere in grado di eseguire il backup del crontab per il mio utente, ma per questo ho bisogno di sapere dove è archiviato.


4
sarebbe bello se qualcuno potesse anche dare una ragione PERCHÉ è spazzato via
Walter Tross,

1
@WalterTross Sì, è abbastanza fastidioso. Immagino che sia un effetto collaterale dell'aggiornamento del cronpacchetto, ma sono d'accordo - non è qualcosa che dovrebbe accadere.
Oli

Uh, non ho cancellato l'utente cron per l'aggiornamento del pacchetto cron!
pl1nk

@ pl1nk Non ho idea di cosa stia cancellando, ma continua a succedere. Fantasma nella macchina, immagino.
Oli

Le tabelle utente sono memorizzate in un'area temporanea / var / spool / cron / crontabs / $ USER, in quanto tale può essere cancellato al prossimo avvio o aggiornamento.
fcm

Risposte:


325

In realtà, non è consigliabile gestire questi file a mano. Per crontabpagina man:

Ogni utente può avere il proprio crontab e sebbene
questi siano file /var/spool/cron/crontabs, non sono
pensati per essere modificati direttamente.

I file sotto /var/spoolsono considerati temporanei / funzionanti, ecco perché probabilmente vengono eliminati durante un aggiornamento, anche se uno sguardo più attento agli cronscript di aggiornamento del pacchetto può far luce su questo.

Ad ogni modo, è sempre buona norma eseguire il backup delle voci cron o conservarle in un file nella directory home.

Presumo che tu stia usando crontab -eper creare file crontab al volo. Se è così, puoi ottenere una "copia" del tuo file crontab facendo crontab -l. Inseriscilo in un file per ottenere un "backup":

crontab -l > my-crontab

Quindi puoi modificare quel file my-crontab per aggiungere o modificare le voci, e quindi "installarlo" dandolo a crontab:

crontab my-crontab

Questo fa lo stesso controllo della sintassi di crontab -e.


7
crontab -lè più facile che passare per /var/spool/cron/crontabs/$USERlo più a causa delle bizzarre autorizzazioni su quel file.
Oli

1
Il iptables-savedi cron. Bello ...
Parthian Shot il

4
Forse dovremmo mettere un crontab per il backup automatico> :)?
PascalVKooten,

4
Frugare /var/spool/cron/crontabsè utile quando si desidera curare o esaminare crontab da più utenti.
dhasenan,

1
Quando si indaga i misteri su un server non si ha familiarità con, è comune sudo grep -rHin "$string" /etc/cron*(dove stringa potrebbe essere un comando come docker, lftp, iptables, ecc E 'una buona idea controllare crontabs utenti anche Questo è quello che mi ha portato a questo Q & A..sudo grep -rHin "$string" /etc/cron* /var/spool/cron*
Bruno Bronosky,


30

Alla fine ho scoperto perché i miei crontab e l'installazione di Postfix continuavano a rompersi dopo l'avvio. È una ragione davvero stupida ma ...

Avevo /var/spoolmontato come tmpfsunità RAM.

Sembra idiota ed è così, ma avevo seguito una delle vecchie modifiche SSD per allungare la vita del mio SSD. In tal modo, ho montato ciecamente /tmp, /var/tmpe /var/spoolcome tmpfssenza pensare alle ripercussioni. Ho pensato che /var/spoolfosse simile /proc/o /run/che fosse utile solo per la durata della sessione. Avevo chiaramente torto.


8
Dovrebbe essere sicuro montare /tmpcome tmpfs, ma non /var/tmpo /var/spool. /tmpviene utilizzato per l'archiviazione temporanea che potrebbe andare persa al riavvio. /var/tmpviene utilizzato per l'archiviazione temporanea che rimarrà dopo il riavvio. E come hai scoperto, /var/spoolè per i dati da elaborare, che rimarranno anche dopo un riavvio.
thomasrutter,


2
Si noti inoltre che il conteggio delle scritture non è più un problema con i moderni SSD.
thomasrutter,

17

Per elencare tutti i lavori cron di tutti gli utenti nel tuo sistema:

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

Un'alternativa al tuo problema sarebbe quella di metterli nella cartella cron.d e specificare l'utente appropriato per cron come nell'esempio:

00 01 * * * user /home/user/user-script.sh

se stai recuperando il crontab da un'altra unità, questo non funzionerà perché crontab -uè in esecuzione dal tuo sistema attuale.
JVE999,

Mentre suppongo che sia una riga in quanto si adatta in meno di 80 caratteri ed è in qualche modo leggibile, in genere mi piace mettere il codice in un formato in modo tale che una persona possa copiare o incollare o inserirlo in uno script (e, in uno script, questa non sarebbe una riga di codice). Suggerimento suggerito modifica ...
Parthian Shot del

Inoltre, stavo per trasformarlo in un while read userciclo, per gestire il caso in cui il nome utente contiene spazi, ma a quanto pare non è un problema. Set molto limitato di caratteri nome utente.
Parthian Shot il
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.