+-Serie cronjobs laufen nicht nach Aktivierung im GUI

Alle Geräte der +-Serie. Geräte für kleinere und mittlere Unternehmen.
Status
Für weitere Antworten geschlossen.

ROBOTRON

Benutzer
Mitglied seit
22. Nov 2008
Beiträge
27
Punkte für Reaktionen
0
Punkte
0
Sorry,
habe schon wieder ein Problem und muß was fragen:
Wenn ich meine DS207+ starte, laufen die cronjobs. Ein ps | grep crond ergibt:
Rich (BBCode):
DiskStation> ps | grep crond
 1224 root        680 S   /usr/sbin/crond
 2627 root        296 S   grep crond
Also er läuft. Ändere ich nun im GUI einen Job,z.B. die Startzeit, und speichere ihn dann, dann gibt mir /var/log/cron.log folgendes aus:
Rich (BBCode):
crond 2.3.2 dillon, started, log level 8
Wenn ich danach mit ps | grep crond wieder prüfe ob crond läuft erhalte ich folgende Ausgabe:
Rich (BBCode):
DiskStation> ps | grep crond
 2631 root        628 S   crond -l 8 -L /var/log/cron.log
 2635 root        284 S   grep crond
/usr/sbin/crond ist also verschwunden. Die Jobs werden nicht ausgeführt. Starte ich dann den crond händisch auf der Konsole mit
/usr/syno/etc.defaults/rc.d/S04crond.sh start, dann werden die Jobs wieder ausgeführt und mit ps | grep crond erhalte ich dann folgende Ausgabe:
Rich (BBCode):
DiskStation> ps | grep crond
 2645 root        668 S   crond -l 8 -L /var/log/cron.log
 2662 root        684 S   /usr/sbin/crond
 2664 root        280 R   grep crond
Hat vielleicht jemand eine Idee woran es liegen könnte, das der crond nach dem Ändern oder Neuanlegen eines jobs nicht mehr läuft?
Danke im Voraus für Eure Bemühungen.
Gruß ROBOTRON
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Da ich nicht weiß, welches cronjobs-Skript du hast (es geistern mehrere herum), kann ich dir die Zeile, wo du was ändern musst, nicht genau sagen ... aber in dem Skript gibt es irgendwo den Aufruf:

Rich (BBCode):
crond -l 8 -L /var/log/cron.log

und der müsste eigentlich heißen:

Rich (BBCode):
/usr/sbin/crond -l 8 -L /var/log/cron.log

Alles klar?

Itari
 

ROBOTRON

Benutzer
Mitglied seit
22. Nov 2008
Beiträge
27
Punkte für Reaktionen
0
Punkte
0
Hallo Itari,
immer wieder klasse wie schnell man hier Hilfe bekommt! Vielen Dank! Die Änderung ist jetzt klar
aber so einen Eintrag habe ich nicht gefunden. Meintest Du vielleicht in der cronjob.php?
Ich habe folgendes Paket installiert:
Paketname:
cronjobs
Version:
1.0
Wartungszuständiger:
itari c/o wizjos :D

Da bin ich ja beim richtigen gelandet....:)
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Meintest Du vielleicht in der cronjob.php?

Ja, da müsste es sein ... was mich nur irritiert ... ich hab da auch den Aufruf ohne den kompletten Pfad drin stehen und bei mir läuft es super. Ich vermute mal, dass das nicht die Ursache dafür ist, das es bei nicht geht ... denn der aus dem Skript heraus gestartete cron läuft ja ... auch wenn er ein wenig anders mit dem ps angezeigt wird.

Itari
 

ROBOTRON

Benutzer
Mitglied seit
22. Nov 2008
Beiträge
27
Punkte für Reaktionen
0
Punkte
0
Also ich habe mir jetzt die ganze cronjob.php durchgeschaut und keinen Eintrag auch ohne Pfad von
Rich (BBCode):
crond -l 8 -L /var/log/cron.log
gefunden.
In welcher Zeile müsste denn der Eintrag stehen oder habe ich die falsche cronjob.php? Kann ich die Zeile einfach einfügen?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Und wenn du am Ende der PHP Datei ein
PHP:
exec('kill -HUP `pidof crond`');
machst?
 

ROBOTRON

Benutzer
Mitglied seit
22. Nov 2008
Beiträge
27
Punkte für Reaktionen
0
Punkte
0
Hallo jahlives,

und Danke für die Antwort. Werde ich gleich heute abend ausprobieren. Allerdings scheint es mir als wenn das php Script einwandfrei läuft, denn beim Speichern des neuen cron-Jobs wird tatsächlich der laufende cron gekillt und ein neuer gestartet ( andere pid ). Laufen tun die cronjobs nachwievor nur,
wenn ich nach dem Speichern direkt auf der Konsole als root angemeldet crond nochmals aufrufe. Irgendwie werde ich das Gefühl nicht los als das es irgendein Problem mit den Rechten oder mit php gibt. Gibt es eigentlich soetwas wie Debug, damit ich auf der Konsole sehen kann was gerade abläuft ( Fehlermeldungen ) wenn das php script abgearbeitet wird? In messages ist nichts zu finden.
Gruß,
ROBOTRON
 
Zuletzt bearbeitet:

ROBOTRON

Benutzer
Mitglied seit
22. Nov 2008
Beiträge
27
Punkte für Reaktionen
0
Punkte
0
@jahlives:
Rich (BBCode):
exec('kill -HUP `pidof crond`');
Habe ich ausprobiert. Allerdings wußte ich nicht was es bewirken sollte. Habe die Zeile in die cronjobs.php eingebaut
und mehr als dass die Zeile dann als Text im GUI aufgetaucht ist, ist nichts passiert.
Hat irgend jemand noch eine Idee warum die cronjobs nicht augeführt werden wenn der crond über das php-script
gestartet wird, wohl aber wenn per Konsole crond per Hand gestartet wird??? Verzweifle langsam.....:confused:
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Habe die Zeile in die cronjobs.php eingebaut
und mehr als dass die Zeile dann als Text im GUI aufgetaucht ist, ist nichts passiert.
Du weisst schon was das heisst? Dieser Code wurde nicht als PHP interpretiert sondern als html ausgegeben. Stand denn die Zeile sicher zwischen <?php und ?> ??
 

ROBOTRON

Benutzer
Mitglied seit
22. Nov 2008
Beiträge
27
Punkte für Reaktionen
0
Punkte
0
Stand denn die Zeile sicher zwischen <?php und ?>??
Da bin ich mir momentan nicht sicher, werde es aber gleich heute abend prüfen.
Du hast mir noch nicht verraten, was der Befehl bewirken soll....:)
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
kill schiesst normalerweise einen Prozess ab. In Verbindung mit -HUP wird erreicht, dass der Prozess seine Config Datei neu einliest. Damit kill aber weiss welcher Prozess bearbeitet werden soll, muss man ihm eine Prozess ID übergeben. Jeder Prozess hat seine eigene. Wenn man die Prozess ID nicht kennt, dann kann man auf der Konsole
Code:
pidof smbd
machen und kriegt als Rückgabe die ID des Prozesses. Das was zwischen ` und ` (Backticks) steht wird ausgeführt und die Rückgabe in den eigentlichen Befehl (kill -HUP) eingebunden.
Letzendlich ergibt ein
Code:
kill -HUP `pidof cron`
z.B. einfach
Damit weiss kill welchen Prozess es wählen soll
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
killall crond tut es eigentlich auch immer ...

Itari
 

jahlives

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

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Aber dann musst du zwei Befehle verwenden, damit eine Config neu eingelesen wird ;)

Das versteh ich nicht, wieso 2 Befehle? ... wenn es am Signal liegt, dass kann man doch auch mitgeben (--signal -HUP) ;)

Itari
 

ROBOTRON

Benutzer
Mitglied seit
22. Nov 2008
Beiträge
27
Punkte für Reaktionen
0
Punkte
0
Also, jahlives,
habe deinen Befehl nun richtig integriert, eine Änderung ergab das leider nicht.
Der crond wurde ordnungsgemäß gekillt und danach wieder aufgerufen. Die cronjobs führt er nachwievor erst dann aus, wenn ich den crond per Hand auf der Konsole starte. Habe nun schon tagelang alle möglichen Tips hier im Forum überprüft, was mit php oder 3rd-Party apps zu tun haben könnte, aber leider keinen Erfolg gehabt. Eigentlich stimmt alles. Selbst das cronjob-IPK Paket wieder deinstaliert und händisch neu installiert brachte für dieses Problem keinen Erfolg.
Hat jemand noch eine Idee, worin der Unterschied liegen könnte, zwischen einem aus einem php-Script heraus gestarteten crond und einem von der Konsole aus gestarteten crond?? Rechte??
Bin für jeden Tipp dankbar, was ich noch überprüfen könnte.

Ps: Danke auch für Deine Erläuterungen zum kill -HUP Befehl. Jetzt verstehe ich das.
 

ROBOTRON

Benutzer
Mitglied seit
22. Nov 2008
Beiträge
27
Punkte für Reaktionen
0
Punkte
0
Hallo itari,
Hallo jahlives,

eigentlich weiß ich jetzt woran es liegt, weiß wie ich es umgehen kann, aber eine Lösung ist es noch nicht. Itari, Du selbst hast in einem anderen Thread mit QTIP über das gleiche Problem diskutiert. Er konnte auch auf der shell was ausführen, was der crond nicht ausführte. Seine Lösung war, im command den absoluten Pfad zum ausführenden Script anzugeben oder ersatzweise in das zu startende script:
Rich (BBCode):
. /etc/profile
einzugeben. Du hast ihm damals empfohlen trotzdem lieber den absoluten Pfad vorzugeben. Mein Problem ist nun, dass ich ja im command für den cronjob bereits den absoluten Pfad vorgegeben hatte und es trotzdem nicht funktionierte. Mit der Zeile . /etc/profile in meinem zu startenden Script funktioniert es jetzt aber. Stellt sich für mich jetzt die Frage, was meiner DS oder der cronjobs.php fehlt, dass der cronjob erst ausgeführt wird, wenn ich diese Zeile in mein script einbaue. Wollte ich jetzt z.B. per cronjob den Timserver abrufen, dann könnte ich den command ja nicht direkt in der Oberfläche eingeben, sondern müsste wieder erst ein script schreiben in dem . /etc/profile angegeben ist, mit der dann ensprechenden Befehlszeile zur Abfrage des Timservers. Blöd oder? Fällt Euch noch etwas dazu ein?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Das versteh ich nicht, wieso 2 Befehle? ... wenn es am Signal liegt, dass kann man doch auch mitgeben (--signal -HUP) ;)

Itari
sorry wusste ned dass kilalll auch mit -HUP funzt...
@ROBOTRON
Wie sieht denn der Aufruf im Script aus und wie der Eintrag in cron?
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Stellt sich für mich jetzt die Frage, was meiner DS oder der cronjobs.php fehlt, dass der cronjob erst ausgeführt wird, wenn ich diese Zeile in mein script einbaue. Wollte ich jetzt z.B. per cronjob den Timserver abrufen, dann könnte ich den command ja nicht direkt in der Oberfläche eingeben, sondern müsste wieder erst ein script schreiben in dem . /etc/profile angegeben ist, mit der dann ensprechenden Befehlszeile zur Abfrage des Timservers. Blöd oder? Fällt Euch noch etwas dazu ein?

Vielleicht kannst noch mal das Skript, welches du via Cronjobs laufen lassen möchtest haarklein (mit Angabe von Leerstellen und Tabulatoren) posten. Und auch die /etc/crontab ...

Und vielleicht könntest mal ein einfaches Kommando (und nur das) mal mit dem Cronjobs testen, ob das geht.

Dann wären wir ein Stück weiter, weil mir im Moment nicht klar ist, warum das Skript einmal mit ./profile im cronjob laufen sollte und einmal ohne ./profile nicht (ich hoffe, ich hab das nun richtig verstanden)

Itari
 

ROBOTRON

Benutzer
Mitglied seit
22. Nov 2008
Beiträge
27
Punkte für Reaktionen
0
Punkte
0
Hallo itari,
ich hoffe, ich hab das nun richtig verstanden
Ja, Du hast es richtig verstanden! Im Anhang jetzt mal die geforderten Info's.
Habe nach deinem Tip nun festgestellt, das normale Kommandos laufen ( hätte ich auch vorher drauf kommen können...:eek: ),
also hier der beispielhafte job reboot und time.windows.com. Scheint also doch an meinem Script zu liegen:
Rich (BBCode):
echo Setport 5.1 | nc -w 1 -n 192.168.1.90 50290
Mache mit der Zeile nichts anderes als mit netcat den Befehl Setport an ein Gerät im Netzwerk zu schicken um Steckdosen ein-und-auszuschalten.
Und diese Zeile wird wie gesagt erst dann ausgeführt, wenn obendrüber
Rich (BBCode):
. /etc/profile
steht, oder wenn ich den crond von Hand auf der
Console starte, nicht jedoch wenn die cronjobs.php den crond neu startet.
Hoffentlich ist es jetzt klarer für Euch.

cronjobs:
cronjobs.jpg

crontab:
crontab.jpg

p5_on.sh:
script.jpg
 

goetz

Super-Moderator
Teammitglied
Sehr erfahren
Mitglied seit
18. Mrz 2009
Beiträge
14.015
Punkte für Reaktionen
271
Punkte
393
Hallo,
wenn Du den crond von Hand auf der Konsole startest bekommt der Prozess die Umgebungsvariblen der aktuellen shell mit und somit findet er auch nc. In shell-scripten beinhaltet die erste Zeile normalerweise eine Angebe zur verwendeten shell, so sollte in Deinem script die erste Zeile lauten
#!/bin/sh
jetzt bin ich mir auf die schnelle nicht sicher ob das reicht um die globale profile einzulesen, wenn das nicht reicht, im script als zweite Zeile
. /etc/profile
dann sollte das laufen.

Gruß Götz
 
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