Richten Sie die wöchentliche CRON-Sicherung ein


7

Ich möchte ein Backup meiner machen /var/lib/mysqlund /var/wwwOrdner und als tar.gz - Dateien auf dem montierten Netzwerk - Dateiserver (uslons001) speichern.

Hier ist meine Bash-Datei in: /bin/backups/mysqlbackup.sh

#!/bin/bash
mkdir /home/lv_admin/uslons001/`date +%d%m%y`
cd /home/lv_admin/uslons001/`date +%d%m%y`
tar -czf mysql.tar.gz /var/lib/mysql
tar -czf www.tar.gz /var/www

Das funktioniert einwandfrei, wenn ich es in einer Cmd-Shell ausführe, aber wenn ich den Cron-Job einrichte, wird es nie ausgeführt, sodass ich den Cron-Job nicht richtig einrichte. Mein Cron Job sieht so aus.

   36 10 * * 5 /bin/backups/mysqlbackup.sh

..die Datei /var/log/cron.log enthält auch nichts, sodass keine Fehler protokolliert werden. (Auch nach dem Aktivieren der Cron-Protokollierung in der Datei /etc/syslog.conf

Antworten:


7

Einige Punkte zu machen:

  • Warum verwenden Sie Timestrings überhaupt in /etc/cron.weekly/Skripten? Sie sollten dort nur ausführbare Skripte einfügen. Sie müssen sie nicht oder irgendetwas anderes crontab. Das wird nur ihre Arbeit duplizieren. Schauen Sie sich /etc/cron.daily/aptein Beispiel an, wovon ich spreche. Es ist nur ein einfaches Skript.

  • Laut Geirhas Kommentar kann die Datei keine Erweiterung haben. Seltsam, ich weiß, also benenne es um:

    sudo mv /etc/cron.weekly/mysqlbackup{.sh,}
  • Sie müssen ausgeführt werden sudo chmod +x /etc/cron.weekly/mysqlbackup, um es ausführbar zu machen. Sie können es dann testen, indem Sie es unter Verwendung dieses Pfads ausführen.

  • Wenn Sie es belassen /etc/cron.weekly/, wird das Skript als root ausgeführt. Keiner Ihrer ~/Links wird funktionieren. Verwenden Sie vollständige Pfade. Ich würde vorschlagen , dass , nachdem Sie das tun mkdirSie cdhinein , und das wird die großen Wege in nachfolgenden Befehlen zu reduzieren. Wenn Sie möchten, dass die generierten Dateien Ihrem Benutzer gehören, erstellen Sie chownsie nach dem Sichern in Ihrem Skript für Ihren Benutzer.

    Ich sehe keinen Grund dafür, dass irgendetwas davon root-gesteuert ist. Sie können das Skript in Ihr Home-Verzeichnis einfügen und einfach den Standard verwenden crontab -e, um Ihre Regel hinzuzufügen und ausführen zu lassen. Es muss immer noch ausführbar sein und ich würde immer noch empfehlen, vollständige Pfade zu verwenden, aber es hält die Berechtigungen etwas einfacher.


3
sudo chmod +x /etc/cron.weekly/mysqlbackup.shwürde das Skript immer noch nicht wöchentlich ausführen lassen. Cron ignoriert Dateien mit Erweiterungen in diesen Verzeichnissen. Und im Allgemeinen sollten Skripte keine Erweiterungen haben.
Geirha

@geirha Das ist ein sehr wichtiger Kommentar! Ist das irgendwo dokumentiert?
Begrenzte Versöhnung

2
@LimitedAtonement, Wenn Sie sich die Standardeinstellung ansehen /etc/crontab, run-partswird verwendet, um die Jobs auszuführen, /etc/cron.{daily,weekly,monthly}wenn anacron "nicht installiert" ist. run-parts (8) erklärt wiederum, welche Zeichen in den Dateinamen zulässig sind. Ich glaube, der Hauptgrund dafür ist, einen Job einfach durch Umbenennen jobnamein jobname.disabledoder ähnliches deaktivieren zu können .
Geirha

2

Der Wochentag ist ein numerisches Feld, daher schlägt er fehl, wenn versucht wird, 'fri' zu analysieren. Ändern Sie das auf 5 (Sonntag ist 0). Bearbeiten: Ich sehe, dass das OP aktualisiert wurde, um dies zu beheben, und es gibt immer noch Probleme, aber sie werden in anderen Antworten behandelt.

Das Cron-Format ist online gut dokumentiert, daher überprüfe ich normalerweise die Dokumente, bevor ich einen neuen Cron-Job schreibe: http://en.wikipedia.org/wiki/Cron

Stellen Sie außerdem sicher, dass Sie crontab -eIhre Cron-Datei mit (oder ähnlichem) bearbeiten, um sicherzustellen, dass sie erneut analysiert wird.


fri und 5 sind beide gültig. Nicht bei allen Implementierungen von cron können Sie eine Abkürzung anstelle einer Zahl für den Wochentag verwenden, aber das cron in Ubuntu tut dies. Sieheman 5 contab
Geirha

1

Ich habe den Speicherort der Bash-Datei in geändert /usr/local/mysqlbackup.sh. Danach habe ich die folgenden Befehle für die Datei ausgeführt:

cd /usr/local/
sudo chown [username] mysqlbackup.sh
sudo chmod -rwx mysqlbackup.sh
sudo chmod go= mysqlbackup.sh

Dann hörte ich auf, ~$ crontab -eden Befehl zum Bearbeiten des Cron-Jobs zu verwenden, und begann damit, sudo nano /etc/crontabeine neue Jobzeile mit den folgenden Angaben zu erstellen :

00 20    * * 5  root  /usr/local/mysqlbackup.sh

Ich habe stattdessen begonnen, diese Datei zu verwenden, weil ich damit festlegen konnte, welcher Benutzer sie ausführen soll. Nach diesen Änderungen funktioniert der Cron-Job.


0

Sie können versuchen, die Fehler von Ihrer Cron-Zeile in eine Datei umzuleiten, z.

/usr/local/mysqlbackup.sh &>/var/log/mysqlcron.log

Das sollte sowohl stdout als auch stderr abfangen und melden, wenn ein Syntaxfehler usw. vorliegt.

Hinweis: Wenn Sie eine Sicherung einer Live- Datenbank durchführen, sollten Sie die spezifischen Dienstprogramme für die Sicherung verwenden mysqldump, anstatt einen generischen tar-Befehl zu verwenden. Der Grund dafür ist, dass wenn sich Dateien in / var / lib / mysql / ändern, während der Tar ausgeführt wird, möglicherweise ein inkonsistentes Image der Datenbank angezeigt wird.


cron führt den Job mit sh aus, sofern Sie nichts anderes angeben, und &>ist keine sh-Syntax. >file 2>&1wird sowohl mit sh als auch mit bash funktionieren.
Geirha

Richtig, guter Punkt.
Bitwelder
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.