Crontab cancellato?


11

Invece di digitare "crontab -e" ho accidentalmente digitato "crontab" e mi sono bloccato nel mezzo di un processo, quindi ho interrotto il processo. Ora quando vado a crontab -e è completamente vuoto. Questo non è affatto buono. Se non riesco a riaverlo, dovrò riscriverlo.

C'è un modo per:

  1. riavere i miei lavori crontab? sono in memoria da qualche parte? Dove si trovano i file crontab specifici dell'account in linux? O
  2. ottenere un registro di tutte le cose che cron ha fatto, così posso decodificare il mio file crontab. Non lo vedevo da molto tempo?

3
Basta ripristinarlo dal backup di sistema più recente.
David Heffernan,

Se hai digitato crontab -r come ho fatto io e hai trovato questo thread, puoi recuperare il comando leggendo i log da / var / log. Nel mio caso syslog.1 aveva tutto ciò di cui avevo bisogno
StackUnder il

Risposte:


14

crontabsenza argomenti legge un file crontab dall'input standard. Ad esempio, potresti usare:

 echo "* * * * *  run-this-every-minute" | crontab

Una volta che hai ostruito il tuo crontab (ovvero, crontab -lnon mostra nulla), non c'è modo di recuperarlo.

Sul mio sistema (Ubuntu 11.04), sono memorizzati i crontab personali, /var/spool/cron/crontabs/<USER>ma questo è ciò che hai ostruito, quindi non ti farà nulla di buono. (Il percorso potrebbe essere diverso sul tuo sistema.)

Vedo le voci /var/log/syslogper i comandi eseguiti da cron; potresti essere in grado di ricostruire il tuo crontab da quello (o l'eventuale equivalente del tuo sistema), ma sarà noioso.

Ecco cosa faccio per evitare questo tipo di problema:

Tengo il mio crontab in un file separato, gestito in un sistema di controllo del codice sorgente. Lo installo solo eseguendo

crontab filename

Non lo uso mai crontab -e. Se intasare accidentalmente il mio crontab, posso semplicemente ricaricarlo dal file. (Beh, quasi mai; a volte uso crontab -eper apportare modifiche temporanee, sapendo che posso ripristinare la versione corrente in un secondo momento.)


@mountainclimber: non sono d'accordo. Per salvare il tuo crontab, usa crontab -l > filename. Per ripristinarla, crontab filename. Utilizzare l'interfaccia fornita dal sistema; non andare alle sue spalle e manipolare i file di sistema. Per prima cosa, l'aggiornamento del file non dirà necessariamente al sistema di rileggerlo; il crontabcomando lo farà. Per un altro, ci possono essere differenze tra ciò che è nel file e l'output di crontab -l; su Ubuntu, il file ha alcune righe di commento in più che ti consigliano di non modificarlo.
Keith Thompson,

Eliminerò l'altro mio commento. Nuovo commento: Keith menziona il percorso /var/spool/cron/crontabs/<USER>. Su SUSE, il mio percorso è leggermente diverso (nota extra barra): /var/spool/cron/cron/tabs/<USER>. Ho pensato di menzionarlo per i neofiti di cron e Linux come me. La risposta di Keith è corretta.
alpinismo

5

Script per il recupero completo di crontab

Ho creato uno script PHP che esegue un ripristino completo del tuo crontab, in base al registro.

Emette una singola istanza di ogni comando cron eseguito dall'utente per l'ultima settimana.

L'ho messo qui

https://github.com/dangreenisrael/recover_crontab

Ecco un esempio di output:

perl ~/sorttv/sorttv.pl

/usr/local/bin/flexget

bash ~/scripts/sort_sports.sh

~/scripts/play_recently_added.sh

1

Mi dispiace, ma non posso fare a meno di chiedere l'ovvio: perché non ripristinarlo dal backup?

Ehm, scusa, vedo che è già stato suggerito.


0

Se la tua variabile di attivazione EDITOR è EDITOR = vi, prova

vi -r

per recuperare la sessione. Non scrivere direttamente la sessione salvata, se ne hai una, nella tua directory crontab. Usalo come guida per ricreare il tuo crontab usando

crontab -e

Nota: poiché non è stato specificato un sistema operativo, Solaris e altri sistemi operativi UNIX non riconoscono le modifiche ai file crontab ad eccezione di quelle create tramite crontab -e. Se ricordo bene, Linux lo fa.


Non ci sono sessioni da recuperare; l'OP digitata crontabanziché crontab -e. Vedi la mia risposta per un modo migliore (IMHO) per mantenere il tuo crontab.
Keith Thompson,

0

Ottima risposta di @Keith Thompson - buona idea ricostruire da / var / log / syslog!

Ho anche accidentalmente bloccato il mio utente crontab ma sono stato in grado di ricostruirlo con il seguente script-fu

mkdir ~/syslog
sudo cp /var/log/syslog* ~/syslog/
sudo chmod 777 ~/syslog/*
cat ~/syslog/* | grep "(username)" | grep -o "CMD.*" | sort | uniq

dove il nome utente deve essere sostituito con l'utente di cui si desidera ricostruire il crontab.

Nota che potresti aver bisogno di decomprimere il contenuto dei tuoi file /var/log/syslog.x.gz prima che i log siano stati compressi (ubuntu comprime syslog.2 +)

Questo otterrà anche solo comandi che sono ancora nei registri, che saranno circa gli ultimi 7 giorni ... quindi se hai un'attività mensile che non è stata eseguita ... quella probabilmente è andata

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.