Anstatt "crontab -e" einzugeben, habe ich versehentlich "crontab" eingegeben und war mitten in einem Prozess stecken geblieben, sodass ich den Vorgang abgebrochen habe. Wenn ich jetzt zu crontab -e gehe, ist es völlig leer. Das ist überhaupt nicht gut. Wenn ich es nicht zurückbekomme, muss ich es neu schreiben.
Gibt es eine Möglichkeit:
- Meine Crontab-Jobs zurückbekommen? sind sie irgendwo in Erinnerung? Wo befinden sich die kontospezifischen Crontab-Dateien unter Linux? ODER
- Holen Sie sich ein Protokoll aller Dinge, die Cron getan hat, damit ich meine Crontab-Datei zurückentwickeln kann. Ich hatte es lange nicht mehr angeschaut?
Antworten:
crontab
Ohne Argumente liest eine Crontab-Datei aus der Standardeingabe. Zum Beispiel könnten Sie verwenden:Sobald Sie Ihre Crontab verstopft haben (dh
crontab -l
nichts mehr zeigen), gibt es keinen guten Weg, sie zurückzubekommen.Auf meinem System (Ubuntu 11.04) sind persönliche Crontabs gespeichert
/var/spool/cron/crontabs/<USER>
- aber genau das haben Sie überfallen, sodass Sie nichts Gutes tun. (Der Pfad kann auf Ihrem System unterschiedlich sein.)Ich sehe Einträge
/var/log/syslog
für Befehle, die von ausgeführt werdencron
. Möglicherweise können Sie Ihre Crontab daraus rekonstruieren (oder das Äquivalent Ihres Systems, falls vorhanden), aber es wird mühsam.Folgendes tue ich, um diese Art von Problem zu vermeiden:
Ich behalte meine Crontab in einer separaten Datei, die in einem Versionsverwaltungssystem verwaltet wird. Ich installiere es nur durch Ausführen
Ich benutze nie
crontab -e
. Wenn ich versehentlich meine Crontab verstopfe, kann ich sie einfach aus der Datei neu laden. (Nun, kaum jemals; manchmal nehmecrontab -e
ich vorübergehende Änderungen vor, da ich weiß, dass ich die aktuelle Version später wiederherstellen kann.)quelle
crontab -l > filename
. Um es wiederherzustellen ,crontab filename
. Verwenden Sie die vom System bereitgestellte Schnittstelle. Gehen Sie nicht hinter den Rücken und manipulieren Sie Systemdateien. Zum einen fordert das Aktualisieren der Datei das System nicht unbedingt auf, sie erneut zu lesen. Dercrontab
Befehl wird. Zum anderen kann es Unterschiede zwischen dem Inhalt der Datei und der Ausgabe von gebencrontab -l
. Unter Ubuntu enthält die Datei einige zusätzliche Kommentarzeilen, die Sie davon abhalten, sie zu bearbeiten./var/spool/cron/crontabs/<USER>
. Bei SUSE ist mein Pfad etwas anders (beachten Sie den zusätzlichen Schrägstrich) :/var/spool/cron/cron/tabs/<USER>
. Ich dachte, ich würde es für Neulinge erwähnen, die wie ich Cron und Linux sind. Die Antwort von Keith ist richtig.Skript für die vollständige Wiederherstellung von Crontab
Ich habe ein PHP-Skript erstellt, das eine vollständige Wiederherstellung Ihrer Crontab basierend auf dem Protokoll ausführt.
Es gibt eine einzelne Instanz jedes Cron-Befehls aus, den der Benutzer in der letzten Woche ausgeführt hat.
Ich habe es hierher gebracht
https://github.com/dangreenisrael/recover_crontab
Hier ist eine Beispielausgabe:
quelle
Es tut mir leid, aber ich kann nicht anders, als das Offensichtliche zu fragen: Warum nicht aus dem Backup wiederherstellen?
Tut mir leid, ich sehe, dass dies bereits vorgeschlagen wurde.
quelle
Wenn Ihre EDITOR-Umgebungsvariable EDITOR = vi ist, versuchen Sie es
um die Sitzung wiederherzustellen. Schreiben Sie die gespeicherte Sitzung, falls Sie eine erhalten, nicht direkt in Ihr crontab-Verzeichnis. Verwenden Sie es als Leitfaden, um Ihre Crontab mit neu zu erstellen
Hinweis: Da Sie kein Betriebssystem angegeben haben, erkennen Solaris und andere UNIX-Betriebssysteme keine Änderungen an Crontab-Dateien außer denen, die mit crontab -e erstellt wurden. Wenn ich mich richtig erinnere, tut es Linux.
quelle
crontab
eher alscrontab -e
. Siehe meine Antwort für eine bessere (IMHO) Möglichkeit, Ihre Crontab zu pflegen.Tolle Antwort von @Keith Thompson - gute Idee, aus / var / log / syslog zu rekonstruieren!
Ich habe auch versehentlich meinen Benutzer crontab überfallen, konnte ihn aber mit dem folgenden Skript-Fu rekonstruieren
Dabei sollte der Benutzername durch den Benutzer ersetzt werden, dessen Crontab Sie rekonstruieren möchten.
Beachten Sie, dass Sie möglicherweise zuerst den Inhalt Ihrer /var/log/syslog.x.gz-Dateien mit einem Gunzip versehen müssen, wenn die Protokolle komprimiert wurden (Ubuntu komprimiert syslog.2 +).
Dadurch werden auch nur Befehle abgerufen, die sich noch in den Protokollen befinden. Dies sind ungefähr die letzten 7 Tage. Wenn Sie also eine monatliche Aufgabe haben, die nicht ausgeführt wurde, ist diese wahrscheinlich nicht mehr vorhanden
quelle