Au lieu de taper "crontab -e", j'ai accidentellement tapé "crontab" et j'ai été bloqué au milieu d'un processus, j'ai donc abandonné le processus. Maintenant, quand je vais à crontab -e, il est entièrement vide. Ce n'est pas bon du tout. Si je ne peux pas le récupérer, je devrai le réécrire.
Existe-t-il un moyen de:
- récupérer mes emplois crontab? sont-ils en mémoire quelque part? Où se trouvent les fichiers crontab spécifiques au compte sous Linux? OU
- obtenir un journal de tout ce que cron a fait, afin que je puisse inverser l'ingénierie de mon fichier crontab. Je ne l'avais pas regardé depuis longtemps?
Réponses:
crontab
sans argument lit un fichier crontab à partir de l'entrée standard. Par exemple, vous pouvez utiliser:Une fois que vous avez encombré votre crontab (c'est-à-dire qu'il
crontab -l
ne montre rien), il n'y a pas de bon moyen de le récupérer.Sur mon système (Ubuntu 11.04), les crontabs personnels sont stockés dans
/var/spool/cron/crontabs/<USER>
- mais c'est ce que vous avez tapoté, donc cela ne vous fera aucun bien. (Le chemin peut être différent sur votre système.)Je vois des entrées
/var/log/syslog
pour les commandes exécutées parcron
; vous pourriez être en mesure de reconstruire votre crontab à partir de cela (ou l'équivalent de votre système, le cas échéant), mais cela va être fastidieux.Voici ce que je fais pour éviter ce genre de problème:
Je garde ma crontab dans un fichier séparé, maintenu dans un système de contrôle de source. Je l'installe uniquement en exécutant
Je n'utilise jamais
crontab -e
. Si j'encombre accidentellement mon crontab, je peux simplement le recharger à partir du fichier. (Eh bien, presque jamais; j'utilise parfoiscrontab -e
pour apporter des modifications temporaires, sachant que je peux restaurer la version actuelle plus tard.)la source
crontab -l > filename
. Pour restaurer,crontab filename
. Utilisez l'interface fournie par le système; n'allez pas derrière lui et manipulez les fichiers système. D'une part, la mise à jour du fichier ne demandera pas nécessairement au système de le relire; lacrontab
commande le fera. Pour un autre, il peut y avoir des différences entre le contenu du fichier et la sortie decrontab -l
; sur Ubuntu, le fichier a quelques lignes de commentaires supplémentaires vous conseillant de ne pas le modifier./var/spool/cron/crontabs/<USER>
. Sur SUSE, mon chemin est légèrement différent (note slash supplémentaire):/var/spool/cron/cron/tabs/<USER>
. Je pensais que je le mentionnerais pour les débutants comme Cron et Linux comme moi. La réponse de Keith est correcte.Script pour la récupération complète de crontab
J'ai fait un script PHP qui fait une récupération complète de votre crontab, basé sur le journal.
Il génère une seule instance de chaque commande cron exécutée par l'utilisateur la semaine dernière.
Je le mets ici
https://github.com/dangreenisrael/recover_crontab
Voici un exemple de sortie:
la source
Je suis désolé, mais je ne peux m'empêcher de demander l'évidence: pourquoi ne pas le restaurer à partir d'une sauvegarde?
Euh, désolé, je vois que cela a déjà été suggéré.
la source
Si votre variable d'environnement EDITOR est EDITOR = vi, essayez
pour récupérer la session. N'écrivez pas directement la session enregistrée, si vous en avez une, dans votre répertoire crontab. Utilisez-le comme un guide pour recréer votre crontab en utilisant
Remarque: Étant donné que vous n'avez pas spécifié de système d'exploitation, Solaris et les autres systèmes d'exploitation UNIX ne reconnaissent pas les modifications apportées aux fichiers crontab, à l'exception de celles créées via crontab -e. Si je me souviens bien, Linux le fait.
la source
crontab
plutôt quecrontab -e
. Voir ma réponse pour une meilleure façon (à mon humble avis) de maintenir votre crontab.Grande réponse de @Keith Thompson - bonne idée de reconstruire à partir de / var / log / syslog!
J'ai également accidentellement encombré mon utilisateur crontab mais j'ai pu le reconstruire avec le script-fu suivant
où nom d'utilisateur doit être remplacé par l'utilisateur dont vous souhaitez reconstruire la crontab.
Notez que vous devrez peut-être d'abord compresser le contenu de vos fichiers /var/log/syslog.x.gz si les journaux ont été compressés (ubuntu zips up syslog.2 +)
Cela n'obtiendra également que les commandes qui sont toujours dans les journaux, ce qui correspondra aux 7 derniers jours ... donc si vous avez une tâche mensuelle qui ne s'est pas exécutée ... celle-ci est probablement partie
la source