Problem mit cron, führt kein Script aus

  • 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.

maze128

Benutzer
Registriert
03. Jan. 2010
Beiträge
227
Reaktionspunkte
0
Punkte
16
Hallo zusammen,

ich habe ein Problem mit crontab, ich habe 2 Script erstellt, die auch einwandfrei funktionieren wenn ich sie per Telnet ausführe.

Diese Scripte sind in /usr/bin/ abgelegt und heißen freespace.sh und warnung.sh.

Sie werden mit cronjobs wie folgt gestartet:

*/5 * * * * root sh /usr/bin/warnung.sh
* 12 * * * root sh /usr/bin/freespace.sh

Also Warnung alle 5min und freespace einmal am Tag um 12:00.

Leider funktioniert das aufrufen nicht, bzw. das Script wird nicht ausgeführt.
Es wird in Cronjob angezeigt, aber er statet das Script leider nicht.
Hat jemand ne Idee woran das liegen könnte?
 
Hast du in den beiden Scripten komplette Pfadangaben verwendet?
 
Hast du in den beiden Scripten komplette Pfadangaben verwendet?

In den scripten kommen keine Pfadangaben vor, nur growl-push...


#!/bin/sh
mydevice="Diskstation"
myevent="Temperature"
datum=`date +"%d.%m.%y`
zeit=`date +"%H:%M`
prowlid="entfernt"
temperatur1=`/usr/syno/bin/smartctl -d marvell -A /dev/hda | grep Temperature_Celsius | awk '{print $10}'`
temperatur2=`/usr/syno/bin/smartctl -d marvell -A /dev/hdb | grep Temperature_Celsius | awk '{print $10}'`
warnwert=18
nachricht1="WARNING!%20$datum%20($zeit)%0AHarddisk:%20Volume%201%0AWarning%20level:%20$warnwert%20C%0ACurrent%20temperature:%20$temperatur1%20C"
nachricht2="WARNING!%20$datum%20($zeit)%0AHarddisk:%20Volume%202%0AWarning%20level:%20$warnwert%20C%0ACurrent%20temperature:%20$temperatur2%20C"
if
[ $warnwert -lt $temperatur2 ];
then wget -O - --no-check-certificate https://prowl.weks.net/publicapi/add?apikey=$prowlid\&application=$mydevice\&event=$myevent\&priority=1\&description=$nachricht1
fi
if
[ $warnwert -lt $temperatur2 ];
then wget -O - --no-check-certificate https://prowl.weks.net/publicapi/add?apikey=$prowlid\&application=$mydevice\&event=$myevent\&priority=1\&description=$nachricht2
fi

Wenn ich das ganz einfach über telnet starte geht das auch funterbar...
 
In den scripten kommen keine Pfadangaben vor, nur growl-push...




Wenn ich das ganz einfach über telnet starte geht das auch funterbar...
Also so auf die Schnelle sehe ich z.B. awk, grep oder wget Aufrufe. Die müssten auch komplette Pfadangaben haben.
cron hat nicht den selben PATH wie wenn du das Script über die Konsole aufrufst.
 
Ich würde es mal ohne das "sh" probieren. Beide scripte ausführbar machen (chmod +x) nicht vergessen.

Rich (BBCode):
*/5 * * * * root sh /usr/bin/warnung.sh
* 12 * * * root sh /usr/bin/freespace.sh

gruss
dude
 
Also so auf die Schnelle sehe ich z.B. awk, grep oder wget Aufrufe. Die müssten auch komplette Pfadangaben haben.
cron hat nicht den selben PATH wie wenn du das Script über die Konsole aufrufst.

Ok, danke. Wie müsste das dann aussehn?

Ich würde es mal ohne das "sh" probieren. Beide scripte ausführbar machen (chmod +x) nicht vergessen.

Schon getestet, keine besserung!
 
Zuletzt bearbeitet:
Mach z.B. für grep mal auf der Konsole das Folgende:
Code:
web> echo $(which grep)
[B]/bin/grep[/B]
das ist dann der komplette Pfad zu grep
 
Das versteh ich nicht ganz, sorry.
Linux ist mir vollkommen neu!

Edit: Noch ne Frage: Wie müssen die Dateirechte sein?

Bei mir steht da:

Rich (BBCode):
-rwxrwxrwx    1 admin    users        1107 Jan  9 19:29 warnung.sh

Stimmt das?
 
Zuletzt bearbeitet:
Schau dir mal diese Zeile an
Code:
temperatur1=`/usr/syno/bin/smartctl -d marvell -A /dev/hda | grep Temperature_Celsius | awk '{print $10}'`
smartctl wird mit komplettem Pfad aufgerufen (und auch gefunden). grep und awk jedoch nur mit dem Befehl des Kommandos, ohne Pfad.
Ich würde mal folgendes probieren
Code:
temperatur1=`/usr/syno/bin/smartctl -d marvell -A /dev/hda | /bin/grep Temperature_Celsius | /bin/awk '{print $10}'`
Mit
Code:
which COMMAND
kriegst du jeweils den kompletten Pfad von COMMAND geliefert
 
Ok, danke,
werde das mal teste.

Das Script stammt von hier, war daher davon ausgegangen, dass das so klappt.


So, mit vollständigem Pfad erhalte ich folgenden Fehler:

Rich (BBCode):
/usr/bin/warnung.sh: /usr/bin/warnung.sh: 7: /bin/awk: not found
/usr/bin/warnung.sh: /usr/bin/warnung.sh: 8: /bin/awk: not found

EDIT: Problem gelöst, Script läuft wieder, aber immernoch nur wenn ich es per Telnet starte.
Per Cronjob leider immernoch nicht... Jemand noch ne Idee?
 
Zuletzt bearbeitet:
Ich habe nicht geschaut wo awk liegt. Mach doch ein which awk und gib den Pfad genau so an wie angegeben
 
Hab ich,
das Script läuft auch wieder, aber nicht per Crontab!
Nur wenn ich das manuell starte, aber trotz Neustart lässt es sich nicht per Crontab starten.
Sind denn die Rechte so richtig??
 
Einmal (das ist das was Cronjob unter etc/crontab speichert):

Rich (BBCode):
#minute	hour	mday	month	wday	who	command
*/30	*	*	*	*	root	/usr/sbin/ntpdate -b time.windows.com 
*/5	*	*	*	*	root	/usr/sbin/warnung.sh	
*	12	*	*	*	root	/usr/sbin/Freespace.sh

Das Script:

Rich (BBCode):
#!/bin/sh
mydevice="Diskstation"
myevent="Temperature"
datum=`date +"%d.%m.%y`
zeit=`date +"%H:%M`
prowlid="entfernt"
temperatur1=`/usr/syno/bin/smartctl -d marvell -A /dev/hda | /bin/grep Temperature_Celsius | /usr/bin/awk '{print $10}'`
temperatur2=`/usr/syno/bin/smartctl -d marvell -A /dev/hdb | /bin/grep Temperature_Celsius | /usr/bin/awk '{print $10}'`
warnwert=18
nachricht1="WARNING!%20$datum%20($zeit)%0AHarddisk:%20Volume%201%0AWarning%20level:%20$warnwert%20C%0ACurrent%20temperature:%20$temperatur1%20C"
nachricht2="WARNING!%20$datum%20($zeit)%0AHarddisk:%20Volume%202%0AWarning%20level:%20$warnwert%20C%0ACurrent%20temperature:%20$temperatur2%20C"
if
        [ $warnwert -lt $temperatur2 ];
        then /usr/syno/bin/wget -O - --no-check-certificate https://prowl.weks.net/publicapi/add?apikey=$prowlid\&application=$mydevice\&event=$myevent\&priority=1\&description=$nachricht1
fi
if
        [ $warnwert -lt $temperatur2 ];
        then /usr/syno/bin/wget -O - --no-check-certificate https://prowl.weks.net/publicapi/add?apikey=$prowlid\&application=$mydevice\&event=$myevent\&priority=1\&description=$nachricht2
fi

Die Rechte der Datei Warnung.sh:

Rich (BBCode):
-rwxrwxrwx    1 admin    users        1107 Jan  9 19:29 warnung.sh
 
Du hast noch 2x date drin.
Code:
[FONT=monospace]
[/FONT]datum=`date +"%d.%m.%y`[FONT=monospace]
[/FONT]zeit=`date +"%H:%M`
ausserdem fehlt bei beiden Zeilen imho das " als Stringendzeichen
 
Dumme Frage, Deine /etc/crontab hat keine Leerzeichen sondern nur Tabs ne!? Der Synology crond mag keine Leezeichen... nur Tabs.

gruss
dude
 
Für meine Begriffe gehört date da zweimal rein, weils einmal Uhrzeit und einmal Datum ist. Anders liefert er mir entweder keine Uhrzeit oder kein Datum.

Hab den Teil jetzt mal geändert:

Rich (BBCode):
datum=`date +"%d.%m.%y"`
zeit=`date +"%H:%M"`

Script läuft per Konsole wunderbar, aber per crontab nicht.
Was ist mit den Rechten?
 
Dumme Frage, Deine /etc/crontab hat keine Leerzeichen sondern nur Tabs ne!? Der Synology crond mag keine Leezeichen... nur Tabs.

gruss
dude

Die hat cronjob so erstellt.
Ich hab sie unter Windows nochmal mit Notepad++ bearbeitet und TAB statt Leerzeichen benutzt, daher geh ich mal davon aus!
 
Für meine Begriffe gehört date da zweimal rein, weils einmal Uhrzeit und einmal Datum ist. Anders liefert er mir entweder keine Uhrzeit oder kein Datum.

Hab den Teil jetzt mal geändert:

Rich (BBCode):
datum=`date +"%d.%m.%y"`
zeit=`date +"%H:%M"`
Script läuft per Konsole wunderbar, aber per crontab nicht.
Was ist mit den Rechten?
Also ich würde es ja eher so probieren
Code:
datum=`/bin/date +"%d.%m.%y"`
zeit=`/bin/date +"%H:%M"`
 
Hast Du crond neu gestartet nachdem Du /etc/crontab editiert hast?
 
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