Root-Crontab wird nicht ausgeführt

Root-Crontab wird nicht ausgeführt

Ich richte meinen Debian-Server so ein, dass meine Datenbanken mit Crontab, dem Dienstprogramm mysqldump und Gunzip gesichert werden.

Aus irgendeinem Grund scheinen meine Crontab-Zeilen fehlzuschlagen, insbesondere die entscheidende:

15 2 * * * /usr/bin/mysqldump --user=root --password=XXX --all-databases | /bin/gzip > /backup/database_`date '+%d-%m-%Y'`.sql.gz

Ich habe mehrere Artikel über die möglichen Ursachen dieses Verhaltens gelesen, kann aber immer noch nicht erkennen, warum dieser Crontab-Job die Datei immer noch nicht erstellen kann, nachdem ich:

  • Root-Berechtigungen verwendet: Ich verwende sie sudo crontab -ezum Bearbeiten der Root-Crontab.
  • Habe ein Whereis verwendet, um die vollständigen Pfade der von mir verwendeten Befehle zu finden, und habe beispielsweise mysqldumpdurch ersetzt /usr/bin/mysqldump.
  • Habe geprüft, ob die ganze Zeile unter Root funktioniert: Sie erstellt ein Archiv mit dem heutigen Datum, das mit dem mysqldump-Ergebnis gefüllt ist (es wird eine Warnung angezeigt, weil ich in der CLI ein Passwort verwende, aber ich glaube nicht, dass das Probleme mit crontab verursachen würde, oder?).

Ich nehme an, dass bei der Konfiguration dieser Zeile in der Crontab etwas nicht stimmt, aber ich kann es nicht sehen.

Offenbar funktioniert die Crontab ordnungsgemäß, denn wenn ich die Zeile anhänge, * * * * * env > /backup/env.txterhalte ich eine Datei, die den Umgebungsinhalt im Ordner /backup enthält ...

Hat jemand eine Ahnung davon?

Danke !

~Stephane

Antwort1

Der Standardpfad für Cron ist:

PATH=/usr/bin:/usr/sbin:.

Das dateDienstprogramm befindet sich in, /bin/daher müssen Sie entweder:

  1. fügen Sie dieses Verzeichnis explizit dem PATHfürcron

    PATH=/bin/:/usr/bin:/usr/sbin:.
    15 2 * * * mysqldump --user=root --password=XXX --all-databases | gzip > /backup/database_$(date '+%d-%m-%Y').sql.gz
    

oder

  1. Geben Sie den vollständigen Pfad für den dateBefehl an:

    15 2 * * * /usr/bin/mysqldump --user=root --password=XXX --all-databases | /bin/gzip > /backup/database_$(/bin/date '+%d-%m-%Y').sql.gz
    

Ich bevorzuge die erste Option, da bei der zweiten Methode zu leicht ein Fehler passiert und man vergisst, den vollständigen Pfad für alle Befehle anzugeben (wie datein Ihrer Frage).

Antwort2

OK, ich habe herausgefunden, was bei mir nicht funktioniert hat:

Durch das Anklicken des /var/log/syslog, habe ich festgestellt, dass Crontab eine Zeilengrößenbeschränkung hat! Beim Lesen der Zeile wurde es also dort angehalten: ... $(date +'Dies führte zu einem „Fehler“ bei der Ausführung der Zeile.

Meine Lösung bestand darin, den Job in ein /root/backup.sh-Skript zu verschieben und die Crontab wie folgt zu bearbeiten:

15 2 * * * /root/backup.sh

Zumindest kann ich jetzt meine Daten sichern!!

Ich hoffe, diese Lösung hilft anderen ;)

verwandte Informationen