ubuntuusers.de

Crontab auf Ubuntu Server

Status: Gelöst | Ubuntu-Version: Server 16.04 (Xenial Xerus)
Antworten |

lntRudi

Anmeldungsdatum:
22. März 2017

Beiträge: Zähle...

Servus ☺ ich kämpfe seit längerem mit der Einrichtung von Cronjobs auf meinem Server..

Ich habe diesen Eintrag in der Crontab von Root gesetzt:

46 8 * * * /home/users/boogieman/Backup/ftpBackup.sh

Dieser wird aber vom System nie ausgeführt. Wenn ich die Datei (welche nun einfach einen Ordner in einen anderen Kopiert) als root ausführe, so gibt es keine Probleme. Auch das Suchen nach diesem Cronjob im Log bringt mich nicht weiter. Im Log ist dieser Eintrag erstellt wurden:

Mar 22 08:46:01 admin CRON[15596]: (root) CMD (/home/users/boogieman/Backup/ftpBackup.sh)

–> Heißt doch jetzt für mich das er den Job ausgeführt hat oder? Es wird nun aber kein Ordner erstellt geschweige denn der Inhalt eines anderen Ordners in diesen Kopiert.

Hier noch mal der Inhalt der ftpBackup.sh:

1
2
3
4
5
6
#erstellt Backup von boogieman/www mit aktuellen datum
datum=$(date +'%d-%m-%Y_%H:%M:%S')


ordner=$(mkdir FTP/FTPBackup_$datum)
cp -r ../www FTP/FTPBackup_$datum

Die Verzeichnisstruktur ist die hier: boogieman/ |– Backup | |– FTP | -- ftpBackup.sh – www

Ich hoffe ich habe alles beachtet und erklärt und hoffe das Ihr mir mit meinem Problem helfen könnt. Konkret lautet meine Frage jetzt eben, wieso es klappt wenn ich die Datei normal ausführe aber nicht wenn ich die per cronjob ausführen lassen möchte.

Vielen Dank im voraus für alle Antworten ☺

Beste Grüße

redknight Team-Icon

Moderator & Supporter
Avatar von redknight

Anmeldungsdatum:
30. Oktober 2008

Beiträge: 21856

Wohnort: Lorchhausen im schönen Rheingau

Läuft dein Skript wenn du es mit

env -i /home/users/boogieman/Backup/ftpBackup.sh

ausführst?

lntRudi

(Themenstarter)

Anmeldungsdatum:
22. März 2017

Beiträge: 23

danke für die Antwort ☺

Ja, wenn ich es so ausführe funzt es wunderbar

redknight Team-Icon

Moderator & Supporter
Avatar von redknight

Anmeldungsdatum:
30. Oktober 2008

Beiträge: 21856

Wohnort: Lorchhausen im schönen Rheingau

lntRudi schrieb:

Ja, wenn ich es so ausführe funzt es wunderbar

Was ist ein funzt?

Als welcher user hast Du denn ausgeführt? Mit anderen Worten, schreibe bitte die Befehlszeile und d eventuelle Ausgaben hier rein, es kann ja keiner deinen rechner sehen.

lntRudi

(Themenstarter)

Anmeldungsdatum:
22. März 2017

Beiträge: 23

sry also es funzt heißt, das es funktioniert ☺

Ich führe den Befehl als root aus. Hier der komplette Aufruf:

1
2
3
4
5
root@admin:/home/users/boogieman/Backup# ./ftpBackup.sh

bzw eben:

root@admin:/home/users/boogieman/Backup# env -i /home/users/boogieman/Backup/ftpBackup.sh

Ausgaben gibt es keine, es werden im script ja auch keine erstellt und fehler bringt er mir auch nicht.

Wenn ich es so manuell starte geht es auch mit beiden befehlen, nur eben nicht wenn ich es als Cronjob ausführen möchte :/ Es ist auch die Crontab vom root, also es wird da auch kein anderer Benutzer genutzt,aber das sieht man ja im log Auszug auch.

Könntest du mir auch noch sagen was genau gemacht wird wenn die Datei per env -i ausgeführt werden soll?

Vielen dank für deine Mühe

Into_the_Pit Team-Icon

Ehemalige
Avatar von Into_the_Pit

Anmeldungsdatum:
25. Juni 2008

Beiträge: 9490

Wohnort: Bochum

Randnotiz: Es gibt bei systemd auch die Möglichkeit mit Timer Units.

lntRudi

(Themenstarter)

Anmeldungsdatum:
22. März 2017

Beiträge: 23

danke, das werde ich auch mal testen. Aber warum das mit crontab nicht geht würde mich dennoch interessieren ☺ Ich schaue mir die Timer mal an und teste das damit mal, danke für den Tipp

redknight Team-Icon

Moderator & Supporter
Avatar von redknight

Anmeldungsdatum:
30. Oktober 2008

Beiträge: 21856

Wohnort: Lorchhausen im schönen Rheingau

lntRudi schrieb:

Könntest du mir auch noch sagen was genau gemacht wird wenn die Datei per env -i ausgeführt werden soll?

Sicher.

env

zeigt dir die Umgebungsvariablen an.

env -i

führt einen Befehl mit _leeren_ Umgebungsvariablen aus, also so wie cron es auch tun würde. Warum das in deinem Fall ohne setzen der PATH-Variable und ohne absolute Pfade funktioniert, ist mir schleierhaft. Mehr dazu und Ansätze zur Behebung im Wiki

lntRudi

(Themenstarter)

Anmeldungsdatum:
22. März 2017

Beiträge: 23

super danke für die Erklärung ☺

Ich bin schon sehr dankbar für eure mühe, könntet Ihr euch das auch noch mal ansehen?

@Into_the_Pit

Icch habe es jetzt mit Timer und Service getestet. Hier der Inhalt der ftpBackup.timer Datei:

1
2
3
4
5
6
7
8
9
[Unit]
Description=Fuehrt das Script ftpBackup aus

[Timer]
OnCalendar=Mon-Fri *-*-* 13:24:00
Unit=ftpBackup.service

[Install]
WantedBy=multi-user.target

Hier der Inhalt der ftpBackup.service:

1
2
3
4
5
6
7
8
9
[Unit]
Description=Diese Unit startet das ftpBackup.sh Script --> die Unit wird vom ftpBackup.timer ausgeführt

[Service]
Type=simple
ExecStart=/home/users/boogieman/Backup/ftpBackup.sh

[Install]
WantedBy=multi-user.target

Mein Script wird aber nicht ausgeführt ☹

Geloggt wird leider wieder nichts:

1
2
Mar 23 13:21:11 admin systemd[1]: Reloading.
Mar 23 13:21:11 admin systemd[1]: Started ACPI event daemon.

Aber ich weiß das er versucht das Script auszuführen er schmiss mir erst diesen Fehler:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Mar 23 13:05:12 admin systemd[1]: Configuration file /etc/systemd/system/ftpBackup.timer is marked executable. Please remove executable permission bits. Proceeding anyw
ay.
Mar 23 13:05:12 admin systemd[1]: Configuration file /etc/systemd/system/ftpBackup.timer is marked world-inaccessible. This has no effect as configuration data is acces
sible via APIs without restrictions. Proceeding anyway.
Mar 23 13:05:12 admin systemd[1]: Reloading.
Mar 23 13:05:12 admin systemd[1]: Configuration file /etc/systemd/system/ftpBackup.timer is marked executable. Please remove executable permission bits. Proceeding anyw
ay.
Mar 23 13:05:12 admin systemd[1]: Configuration file /etc/systemd/system/ftpBackup.timer is marked world-inaccessible. This has no effect as configuration data is acces
sible via APIs without restrictions. Proceeding anyway.
Mar 23 13:05:12 admin systemd[1]: Started ACPI event daemon.

Diese Probleme konnte ich aber mit dem anpassen des chmods der timer Datei ( auf 644 ) beheben.

Habe ich da irgendwo Fehler drin?

Vielen Dank!

Into_the_Pit Team-Icon

Ehemalige
Avatar von Into_the_Pit

Anmeldungsdatum:
25. Juni 2008

Beiträge: 9490

Wohnort: Bochum

Probier mal in der .service

Type=oneshot

Zeige auch mal die Ausgabe von

systemctl list-timers
systemctl status ftpBackup.service

Passen die Berechtigungen des Scriptes, wenn es in Deinem Benutzerverzeichnis liegt? Ansonsten kannst Du es nach usr/local/bin schieben und von dort ausführen lassen.

lntRudi

(Themenstarter)

Anmeldungsdatum:
22. März 2017

Beiträge: 23

danke,

den Type habe ich geändert.

Hier die Ausgabe von systemcl list-timers:

1
Fri 2017-03-24 20:03:00 CET  23h left Thu 2017-03-23 20:03:01 CET  4s ago       ftpBackup.timer              ftpBackup.service

-timers:

und von: systemctl status ftpBackup.service:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
3 timers listed.
Pass --all to see loaded but inactive timers, too.
root@admin:/etc/systemd/system# systemctl status ftpBackup.service
* ftpBackup.service - Diese Unit startet das ftpBackup.sh Script --> die Unit wird vom ftpBackup.timer ausgeführt
   Loaded: loaded (/etc/systemd/system/ftpBackup.service; disabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Thu 2017-03-23 20:03:01 CET; 14s ago
  Process: 21177 ExecStart=/home/users/boogieman/Backup/ftpBackup.sh (code=exited, status=203/EXEC)
 Main PID: 21177 (code=exited, status=203/EXEC)

Mar 23 20:03:01 admin.cnmgc.de systemd[1]: Starting Diese Unit startet das ftpBackup.sh Script --> die Unit wird vom ftpBackup.timer ausgeführt...
Mar 23 20:03:01 admin.cnmgc.de systemd[1]: ftpBackup.service: Main process exited, code=exited, status=203/EXEC
Mar 23 20:03:01 admin.cnmgc.de systemd[1]: Failed to start Diese Unit startet das ftpBackup.sh Script --> die Unit wird vom ftpBackup.timer ausgeführt.
Mar 23 20:03:01 admin.cnmgc.de systemd[1]: ftpBackup.service: Unit entered failed state.
Mar 23 20:03:01 admin.cnmgc.de systemd[1]: ftpBackup.service: Failed with result 'exit-code'.

Hier kommt ja jetzt wenigstens mal ein Fehler ☺ Der kommt auch egal wo ich das Script ausführe, also auch im bin Order kommt dieser Fehler..

Wisst Ihr was der genau aussagt?

redknight Team-Icon

Moderator & Supporter
Avatar von redknight

Anmeldungsdatum:
30. Oktober 2008

Beiträge: 21856

Wohnort: Lorchhausen im schönen Rheingau

Hast Du denn den Tip aus dem Cron-Artikel mal umgesetzt?, also PATH gesetzt oder absolute Pfade für deine Aufrufe genutzt?

lntRudi

(Themenstarter)

Anmeldungsdatum:
22. März 2017

Beiträge: 23

sry hatte jetzt erstmal die timer geschichte gemacht. Jetzt habe ich auch den vorschlag aus dem Wiki versucht.

Habe jetzt diesen Eintrag in meiner Crontab:

1
49 21 * * *       /bin/bash --login /home/users/boogieman/Backup/ftpBackup.sh

Hat er auch gemacht siehe log:

1
Mar 23 21:49:01 admin CRON[31319]: (root) CMD (/bin/bash --login /home/users/boogieman/Backup/ftpBackup.sh)

Aber den Ordner hat er wieder nicht erstellt. Um jegliche Rechteprobleme auzuschliesen, ist das Script und der FTP Ordner auf chmod 777.

Und absolute Pfade verwende ich beim Aufruf ja schon die ganze Zeit. habe jetzt auch im Script die Pfade absolut gesetzt und jetzt geht es..

Es geht jetzt auch wenn ich den Cronjob ohne /bin/bash --login aufrufe. Es lagv also wirklich nur daran das in dem sicherungs Script keine absoluten Pfade verwendet wurden..

Vielen dank für die sehr gute Hilfe !

Antworten |