Problem mit cron, führt kein Script aus

Status
Für weitere Antworten geschlossen.

maze128

Benutzer
Mitglied seit
03. Jan 2010
Beiträge
227
Punkte für Reaktionen
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?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Hast du in den beiden Scripten komplette Pfadangaben verwendet?
 

maze128

Benutzer
Mitglied seit
03. Jan 2010
Beiträge
227
Punkte für Reaktionen
0
Punkte
16
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...
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
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.
 

thedude

Benutzer
Mitglied seit
30. Nov 2009
Beiträge
2.244
Punkte für Reaktionen
2
Punkte
84
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
 

maze128

Benutzer
Mitglied seit
03. Jan 2010
Beiträge
227
Punkte für Reaktionen
0
Punkte
16
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:

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
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
 

maze128

Benutzer
Mitglied seit
03. Jan 2010
Beiträge
227
Punkte für Reaktionen
0
Punkte
16
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:

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
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
 

maze128

Benutzer
Mitglied seit
03. Jan 2010
Beiträge
227
Punkte für Reaktionen
0
Punkte
16
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:

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Ich habe nicht geschaut wo awk liegt. Mach doch ein which awk und gib den Pfad genau so an wie angegeben
 

maze128

Benutzer
Mitglied seit
03. Jan 2010
Beiträge
227
Punkte für Reaktionen
0
Punkte
16
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??
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0

maze128

Benutzer
Mitglied seit
03. Jan 2010
Beiträge
227
Punkte für Reaktionen
0
Punkte
16
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
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
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
 

thedude

Benutzer
Mitglied seit
30. Nov 2009
Beiträge
2.244
Punkte für Reaktionen
2
Punkte
84
Dumme Frage, Deine /etc/crontab hat keine Leerzeichen sondern nur Tabs ne!? Der Synology crond mag keine Leezeichen... nur Tabs.

gruss
dude
 

maze128

Benutzer
Mitglied seit
03. Jan 2010
Beiträge
227
Punkte für Reaktionen
0
Punkte
16
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?
 

maze128

Benutzer
Mitglied seit
03. Jan 2010
Beiträge
227
Punkte für Reaktionen
0
Punkte
16
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!
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
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"`
 

thedude

Benutzer
Mitglied seit
30. Nov 2009
Beiträge
2.244
Punkte für Reaktionen
2
Punkte
84
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