Cron Job wird nicht ausgeführt

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

banshe

Benutzer
Registriert
14. Jan. 2012
Beiträge
19
Reaktionspunkte
0
Punkte
0
Hallo zusammen

Ich habe mal wieder eine Frage:
Ich habe ein Script erstellt und möchte dass dieses jeden Tag um 23:00Uhr ausgeführt wird.

Das Script hat die CHMOD rechte auf 777
Das Logfile, in welches das Script schreibt hat auch CHMOD 777

Die crontab Datei habe ich als root angepasst - ich habe zu oberst eine neue Zeile eingefügt:

Rich (BBCode):
#minute    hour    mday    month    wday    who    command
0          23      *       *        *       root   sh /volume1/Ordner/Ordner/Ordner/script.sh

Der Shebang ist im Script definiert
Rich (BBCode):
#!/bin/sh

Und crond habe ich auch schon neu gestartet
Rich (BBCode):
/usr/syno/etc/rc.d/S04crond.sh stop
/usr/syno/etc/rc.d/S04crond.sh start

Ich bin gerade etwas ratlos...
Kann es sein dass das Script nicht ausgeführt wird, weil die Harddisks nach 20min in den Standby gehen und um 23:00Uhr im Standby sind?


Gruss
banshe
 
Nimm mal das "sh" vor dem Kommando weg oder probier es mal mit dem gesamtem Pfad zu sh ("which sh").
Sind die Trennungen im Crontab mit Tabulator gemacht?

MfG Matthieu
 
ohne dein script.php zu kennen würde ich mal darauf tippen, dass du im Script jeweils nicht komplette Pfadangaben zu den Kommandos hast. cron hat einen andere PATH als die Konsole d.h. man kann ein Script manuell auf der Konsole ausführen, aber cron kann es dann trotzdem ned
 
Sind die Trennungen im Crontab mit Tabulator gemacht?

Ja, habe die Trennungen mit dem Tabulator gemacht...


ohne dein script.php zu kennen würde ich mal darauf tippen, dass du im Script jeweils nicht komplette Pfadangaben zu den Kommandos hast. cron hat einen andere PATH als die Konsole d.h. man kann ein Script manuell auf der Konsole ausführen, aber cron kann es dann trotzdem ned

Hmm... eigentlich nicht.
Mein MINI Script.sh (nicht script.php):

Rich (BBCode):
#!/bin/sh
>> log1.log echo "$(date +%Y-%m-%d)" "`df -h | grep /volume1 | awk '{print $1}' | sed 's/.$//'`" "`df -h | grep /volume1 | awk '{print $2}' | sed 's/.$//'`" "`df -h | grep /volume1 | awk '{print $3}' | sed 's/.$//'`" "`df -h | grep /volume1 | awk '{print $4}' | sed 's/.$//'`"
>> log1.log echo
 
ich sehe da aber alle Kommandos ohne komplette Pfadangaben ;-)
 
ich sehe da aber alle Kommandos ohne komplette Pfadangaben ;-)

Oww .. Pfadangaben zu den Kommandos... :eek:
Wie muss ich dies denn genau bewerkstelligen?

Wie und wo definiere ich dies? Mach ich das für wiederholenden Kommandos in eine Variable?


Danke euch
 
mittels which CMD findest du den kompletten Pfad zum Kommando. Dann bei jedem anpassen oder den Pfad in eine Var und dann bei den Kommandos voranstellen. Oder den PATH von cron überschreiben. Dazu auf der Konsole mal echo $PATH machen und den Output speichern. Dann in deinem Script gleich nach der Shebang
Code:
export PATH=PATH_AUS_DEINEM_OUTPUT
 
mittels which CMD findest du den kompletten Pfad zum Kommando. Dann bei jedem anpassen oder den Pfad in eine Var und dann bei den Kommandos voranstellen. Oder den PATH von cron überschreiben. Dazu auf der Konsole mal echo $PATH machen und den Output speichern. Dann in deinem Script gleich nach der Shebang
Code:
export PATH=PATH_AUS_DEINEM_OUTPUT

Hilfe...

- Hab jetzt alle Pfade angegeben..
- Crond neu gestartet

Funktioniert nicht... wenn ich das Script manuell starte, gehts weiterhin... also habe ich bei den Pfaden nichts verbockt...

Cond-Datei (Habe die Uhrzeit für den Testzweck jeweils 2min ins Vorraus gestellt):
Rich (BBCode):
#minute hour    mday    month   wday    who     command
27      8       *       *       *       root    /bin/sh /volume1/ORDNER/ORDNER/ORDNER/auswertung.sh

Script:
Rich (BBCode):
#!/bin/sh
>> /volume1/ORDNER/ORDNER/ORDNER/log1.log /bin/echo "$(/bin/date +%Y-%m-%d)" "`/bin/df -h | /bin/grep /volume1 | /usr/bin/awk '{print $1}' | /bin/sed 's/.$//'`" "`/bin/df -h | /bin/grep /volume1 | /usr/bin/awk '{print $2}' | /bin/sed 's/.$//'`" "`/bin/df -h | /bin/grep /volume1 | /usr/bin/awk '{print $3}' | /bin/sed 's/.$//'`" "`/bin/df -h | /bin/grep /volume1 | /usr/bin/awk '{print $4}' | /bin/sed 's/.$//'`"
>> /volume1/ORDNER/ORDNER/ORDNER/log1.log /bin/echo


Wo mache ich den Fehler?

Herzliche Grüsse
banshe
 
jahlives meinte, dass du den Pfad innerhalb deines Scripts neu setzt, also etwa so
Code:
#!/bin/sh
export PATH=PATH_AUS_DEINEM_OUTPUT
...
Dann brauchst du keine Pfadangabe bei den einzelnen Befehlen mehr.

Gruß Benares
 
Hallo zusammen

Soweit ich gestern spät Abends gesehen habe, funktioniert der Cronjob nun...
Der Fehler war im Speicherpfad zum Logfile... :D

Habe aktuell die Pfadangaben zu den einzelnen Befehlen noch belassen... --> Never touch a running system <-- =D

Danke euch!
 
ich habe ein ganz ähnliches problem:

im telnet funktioniert das script, aber in der crontab geht es nicht.
Code:
#!/bin/sh
#
cd /Volume1/web/backup/
cat dbbackup.ftp | lftp -u user,pw -p 21 forum.de/html/backup/

Rich (BBCode):
#minute    hour    mday    month    wday    who    command
0          20      *       *        *       root   /volume1/web/backup/dbbackup.sh

wer weiß rat und kann mir helfen?
 
wer weiß rat und kann mir helfen?
Das übliche halt. Übernimm mal noch die Zeilen "PATH=..." und "export PATH" aus der /etc/profile mit in dein Script.
Edit: Ausserdem ist das große V bei Volume1 bestimmt falsch.

Gruß Benares
 
Zuletzt bearbeitet:
wie müsste das script dann aussehen?

so hier:

Rich (BBCode):
#!/bin/sh

export PATH=cd /volume1/web/backup/
 
ich versteh es so das du die 2 zeilen in dein skript einbauen solltest

#!/bin/sh
#
PATH=<inhalt aus deiner /etc/profile>
export PATH
cd /Volume1/web/backup/
cat dbbackup.ftp | lftp -u user,pw -p 21 forum.de/html/backup/

weil cron dies skript in einer eigenen umgebung ausfürt.
 
so gerade mal getestet, leider kommt immer noch eine blöde fehlermeldung:

Feb 27 12:03:01 crond: USER root pid 22730 cmd /volume1/web/backup/dbbackup.sh
/bin/sh: /volume1/web/backup/dbbackup.sh: not found

mein script sieht nun wie folgt aus:
Rich (BBCode):
#!/bin/sh
#
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin
export PATH

cd /volume1/web/backup/
cat dbbackup.ftp | lftp -u db,pw -p 21 forum.de/html/backup/
 
Ausführrechte sitzen?
Code:
chmod 755 /volume1/web/backup/dbbackup.sh
Gruß Benares
 
ich habe es gerade mit filezilla überprüft cmod ist auf 777.
 
und das Script ist mit einem Unix-fähigen Editor erstellt? (kein ^M am Zeilenende im vi)
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat