Shell-Skript läuft nicht mit Cronjob

1379
erdomester

Ich verwende PUTTY, um den Server zu erreichen. Ich kann die Datenbanken mit dem folgenden Befehl sichern:

/usr/bin/mysqldump --all-databases | /bin/gzip > Backup_DB/alldatabases_test.sql.gz 

Wenn ich das Skript von root aus ausführe, wird die Datei im angegebenen Ordner abgelegt:

root@server1 [~]# sh mybackup.sh root@server1 [~/Backup_DB]# ls -a ./ ../ alldatabases_test.sql.gz 

Wenn ich dies jedoch als Cronjob eingerichtet habe, wird nichts abgespeichert:

*/2 * * * * sh mybackup.sh 

Andere Cronjobs funktionieren gut.

BEARBEITEN

Die Ausführung des Skripts funktioniert also nicht, aber ich freue mich über Ihre Hilfe. Mein ultimatives Ziel ist es, das Skript von einem Ort aus auszuführen, an dem sich alle meine anderen Cronjobs befinden, und das Backup in einem Ordner zu erstellen, auf den ich FTP-Zugriff habe. Deshalb habe ich einen Cronjob hinzugefügt:

*/2 * * * * sh /home/mysite/www/cronjobs/mybackup.sh 

mit dem Inhalt:

/usr/bin/mysqldump --all-databases | /bin/gzip > /home/mysite/www/cronjobs/alldatabases.sql.gz 

Das funktioniert auch nicht. Ich konnte die Datei alldatabases.sql.gz nicht im Ordner / cronjobs finden. Sind die Pfade falsch eingestellt?

0
Wo ist dein "mybackup.sh"? Kannst du versuchen, deinen cronjob in `sh / path / to / mybackup.sh` zu ändern? attomos vor 10 Jahren 0
Ich bin kein Linux-Typ, aber wenn ich mich bei PUTTY einlogge und die Ordner aufliste, die ich sehe, sind Ordner wie Desktop, Dokumente, Downloads, Bilder, public_html usw. Hier ist mybackup.sh. erdomester vor 10 Jahren 0
Ok, wenn Sie "mybackup.sh" sehen. Können Sie "pwd" eingeben, um das aktuelle Arbeitsverzeichnis zu erhalten. Nehmen wir an, es ist `/ home / username` und hängt es mit` mybackup.sh` an. In Ihrem Cron können Sie also etwas wie "sh / home / username / mybackup.sh" verwenden. Ich hoffe das hilft : ) attomos vor 10 Jahren 0
Es ist / root. Sollte ich die Datei auch anhängen? erdomester vor 10 Jahren 0
Ja, du kannst es versuchen. `sh / root / mybackup.sh` attomos vor 10 Jahren 0
Nichts leider erdomester vor 10 Jahren 0

1 Antwort auf die Frage

1
l0b0

Zunächst benötigen Sie den vollständigen Pfad zum Skript, wie @attomos sagte . Der einfachste Weg, dies zu erhalten, ist das Ausführen cd relative/path/to/script/directoryund dann pwdoder echo "$PWD"das aktuelle Verzeichnis.

Zweitens ist der Backup_DB/alldatabases_test.sql.gzPfad innerhalb des Skripts jetzt relativ zum Systemstamm, daher versucht das Skript, es zu speichern /Backup_DB/alldatabases_test.sql.gz, was wahrscheinlich nicht beabsichtigt war. Sie müssen diesen Weg machen absolut als auch : /root/Backup_DB/alldatabases_test.sql.gz.

Sie sollten eine Fehlerausgabe von diesem in sehen /var/log/cron.

Das hat nicht geholfen. Das Protokoll enthält nichts über dieses Skript. erdomester vor 10 Jahren 0
Was ist die aktuelle Zeile in Ihrer Crontab? l0b0 vor 10 Jahren 0
Ich habe meine Frage bearbeitet. Ich hoffe, dass das weiter ausgeführt wird. erdomester vor 10 Jahren 0
Sie müssen einen absoluten Pfad für die Ausgabedatei verwenden, wie ich gerade sagte. Mit Ihrem neuesten Cron-Job wird `alldatabases.sql.gz` im Systemstammverzeichnis gespeichert. Der Shell-Redirect-Operator arbeitet mit dem * aktuellen Verzeichnis *, das zumindest für einen Root-Cron-Job das Root-Verzeichnis sein wird. l0b0 vor 10 Jahren 0
Ich habe den Pfad hinzugefügt. Bitte sehen Sie sich meinen editierten Beitrag erneut an. Im Ordner / cronjobs wurde noch keine Datei erstellt. erdomester vor 10 Jahren 0
Was ist die Ausgabe von "ls / home / mysite / www / cronjobs"? l0b0 vor 10 Jahren 0
Beeindruckend. Es kam endlich! Und Sie hatten recht, ohne den absoluten Pfad wurde eine Datei in / home / mysite erstellt, jedoch nicht root. Danke für deine Hilfe! erdomester vor 10 Jahren 0