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.