Hallo, ich habe mir in Perl ein cgi - Script geschrieben, dass mittels dem Programm digitemp die Temperatur von einem an die serielle Schnittstelle angeschlossenen Fühler hohlt und in eine Datenbank schreibt. Dieses Programm wird alle 10 min. mittels crontab ausgeführt. -*/01 * * * * root /srv/www/cgi-bin/temperatur/aussen.cgi Wenn ich das Programm normal als root ausführe funktioniert es. Wird es aber vom cron ausgeführt, dann misst das Programm die Temperatur nicht! Woran könnte das liegen? fg Josef
On 2003-03-11 11:57:46, Josef Thaller wrote:
Wenn ich das Programm normal als root ausführe funktioniert es. Wird es aber vom cron ausgeführt, dann misst das Programm die Temperatur nicht!
Hat das Programm die korrekten Rechte? Was steht in der Mail, die root normalerweise bei einem fehlgeschlagenen cron bekommt? Sorry, aber meine Glaskugel ist schon wieder in der Spülmaschine. Gruß Volker -- [ Volker Kroll [ eMail: kroll@strato.de [ Senior Developer [ Tel : 030 - 88 615 -0 [ Strato Rechenzentrum GmbH [ Web : http://www.strato.de
Hallo, der Cronjob funktioniert, das Programm wird ausgeführt und die Daten werden in die Datenbank geschrieben, leider fehlt aber die Temperatur! Fehlermeldung gibts auch keine! Rechte des Programms: -rwxrwxr-x 1 root users 29272 Nov 29 13:13 digitemp Rechte meines CGI Scripts: -rwxrwxr-x 1 root users 1861 Mar 11 10:57 aussen.cgi Rechte der seriellen Schnittstelle: crw-rw---- 1 root uucp 4, 65 Mar 11 12:36 ttyS1 das Programm im Script ist mit gesamten Pfad angegeben! Danke Josef
-----Ursprüngliche Nachricht----- Von: Kroll, Volker [mailto:Kroll@strato.de] Gesendet: Dienstag, 11. März 2003 12:02 An: suse-linux@suse.com Betreff: Re: Zugriff auf ttyS1
On 2003-03-11 11:57:46, Josef Thaller wrote:
Wenn ich das Programm normal als root ausführe funktioniert es. Wird es aber vom cron ausgeführt, dann misst das Programm die Temperatur nicht!
Hat das Programm die korrekten Rechte? Was steht in der Mail, die root normalerweise bei einem fehlgeschlagenen cron bekommt?
Sorry, aber meine Glaskugel ist schon wieder in der Spülmaschine.
Gruß Volker
-- [ Volker Kroll [ eMail: kroll@strato.de [ Senior Developer [ Tel : 030 - 88 615 -0 [ Strato Rechenzentrum GmbH [ Web : http://www.strato.de
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Am Die, 2003-03-11 um 12.37 schrieb Josef Thaller:
Hallo,
der Cronjob funktioniert, das Programm wird ausgeführt und die Daten werden in die Datenbank geschrieben, leider fehlt aber die Temperatur! Fehlermeldung gibts auch keine!
Rechte des Programms: -rwxrwxr-x 1 root users 29272 Nov 29 13:13 digitemp
Rechte meines CGI Scripts: -rwxrwxr-x 1 root users 1861 Mar 11 10:57 aussen.cgi
Rechte der seriellen Schnittstelle: crw-rw---- 1 root uucp 4, 65 Mar 11 12:36 ttyS1
WER, welcher User, startet den cronjob? Die Rechte des Programms sind insoweit nicht wichtig, zur Laufzeit hat es die Rechte des Users, der den crontab-Befehl aufgesetzt hat. Wenn der User nicht root ist, was ich vermute, gehört er zur Gruppe uucp? Gruss, Wolfgang
* On Tue, 11 Mar 2003 at 12:49 +0100, Wolfgang Hinsch wrote: [...]
WER, welcher User, startet den cronjob? Die Rechte des Programms sind insoweit nicht wichtig, zur Laufzeit hat es die Rechte des Users, der den crontab-Befehl aufgesetzt hat. Wenn der User nicht root ist, was ich vermute, gehört er zur Gruppe uucp?
,----[ Message-ID:
Adalbert Michelic wrote:
* On Tue, 11 Mar 2003 at 12:49 +0100, Wolfgang Hinsch wrote:
WER, welcher User, startet den cronjob?
,----[ Message-ID:
]- | -*/01 * * * * root /srv/www/cgi-bin/temperatur/aussen.cgi `---- ^^^^
Wenn man das aber in die User-Crontab von Adalbert eintraegt klappt das nicht. Auf /etc/crontab hat sich der OP nicht festgelegt. Peter
* On Tue, 11 Mar 2003 at 14:03 +0100, Peter Wiersig wrote:
Adalbert Michelic wrote:
* On Tue, 11 Mar 2003 at 12:49 +0100, Wolfgang Hinsch wrote:
WER, welcher User, startet den cronjob?
,----[ Message-ID:
]- | -*/01 * * * * root /srv/www/cgi-bin/temperatur/aussen.cgi `---- ^^^^ Wenn man das aber in die User-Crontab von Adalbert eintraegt klappt das nicht. Auf /etc/crontab hat sich der OP nicht festgelegt.
Dann klappt es aber gar nicht, weil crontab kein Programm namens root ausführen kann. Laut Aussage von Josef wird das Programm aber ausgeführt und es werden auch Daten in die Datenbank geschrieben. Das lässt mich darauf schließen, daß der Befehl nicht in der user-crontab steht, weil da ginge so gar nix. Ergo folgere ich, daß die Zeile aus /etc/crontab entnommen ist, und hier gibt das von mir unterstrichene Feld den Uernamen an, nuter dem das Zeug laufen soll. Ich hoffe ja doch, daß der cron-daemon bei Josef die Berechtigung hat, Prozesse als root auszuführen. -- Adalbert GPG welcome, request public key: mailto:adalbert+key@lopez.at
* On Tue, 11 Mar 2003 at 11:57 +0100, Josef Thaller wrote:
ich habe mir in Perl ein cgi - Script geschrieben, dass mittels dem Programm digitemp die Temperatur von einem an die serielle Schnittstelle angeschlossenen Fühler hohlt und in eine Datenbank schreibt. Dieses Programm wird alle 10 min. mittels crontab ausgeführt.
-*/01 * * * * root /srv/www/cgi-bin/temperatur/aussen.cgi
Wenn ich das Programm normal als root ausführe funktioniert es. Wird es aber vom cron ausgeführt, dann misst das Programm die Temperatur nicht!
<Glaskugel mode=on> Du rufst aus dem Skript andere Programme ohne Angabe eines expliziten Pfades auf, die Programme liegen aber nicht in dem in cron-Jobs üblicherweise nur eingeschränkten Pfad. > -- Adalbert GPG welcome, request public key: mailto:adalbert+key@lopez.at
Am Die, 2003-03-11 um 11.57 schrieb Josef Thaller:
Hallo,
ich habe mir in Perl ein cgi - Script geschrieben, dass mittels dem Programm digitemp die Temperatur von einem an die serielle Schnittstelle angeschlossenen Fühler hohlt und in eine Datenbank schreibt. Dieses Programm wird alle 10 min. mittels crontab ausgeführt.
-*/01 * * * * root /srv/www/cgi-bin/temperatur/aussen.cgi
Wenn ich das Programm normal als root ausführe funktioniert es. Wird es aber vom cron ausgeführt, dann misst das Programm die Temperatur nicht!
1. Zugriffsrechte. Wer startet den cronjob? 2. Parameter der Schnittstelle. Serielle Schnittstellen werden bei Nichtbenutzung auf Defaulwerte gesetzt, die der Job jedesmal wieder neu setzen muss. 3. Sind alle Pfade korrekt gesetzt? Findet der Job Perl? HTH, Wolfgang
Am Die, 2003-03-11 um 11.57 schrieb Josef Thaller:
-*/01 * * * * root /srv/www/cgi-bin/temperatur/aussen.cgi
Woher stammt die Zeile oben ? crontab -l? Die Felder 1-5 steuern die Laufzeit, Feld 6 den Aufruf. Woher kommt "root"? Ansonsten: Meldungen auf ein eigenes Log-File in das Script streuen. Startet es überhaupt? Gruss, Wolfgang
On 2003-03-11 03:17:15, Wolfgang Hinsch wrote:
Am Die, 2003-03-11 um 11.57 schrieb Josef Thaller:
-*/01 * * * * root /srv/www/cgi-bin/temperatur/aussen.cgi
Woher stammt die Zeile oben ? crontab -l? Die Felder 1-5 steuern die Laufzeit, Feld 6 den Aufruf. Woher kommt "root"?
Das ist das Format von /etc/crontab
Startet es überhaupt?
Soweit ich Josef verstanden habe (in PM) ja. Nur die Werte werden nicht empfangen. Gruß V. -- [ Volker Kroll [ eMail: kroll@strato.de [ Senior Developer [ Tel : 030 - 88 615 -0 [ Strato Rechenzentrum GmbH [ Web : http://www.strato.de
Am Die, 2003-03-11 um 15.16 schrieb Kroll, Volker:
On 2003-03-11 03:17:15, Wolfgang Hinsch wrote:
Am Die, 2003-03-11 um 11.57 schrieb Josef Thaller:
-*/01 * * * * root /srv/www/cgi-bin/temperatur/aussen.cgi
Woher stammt die Zeile oben ? crontab -l? Die Felder 1-5 steuern die Laufzeit, Feld 6 den Aufruf. Woher kommt "root"?
Das ist das Format von /etc/crontab
Startet es überhaupt?
Soweit ich Josef verstanden habe (in PM) ja. Nur die Werte werden nicht empfangen.
Einspruch. Laut der Doku zu crontab(5) kann innerhalb einer Zeile kein User angegeben werden. Die /etc/crontab ist wahrscheinlich entweder ein Relikt vergangener SuSE-Zeiten oder eine Vorlage für irgendein Yast-Script. Jeder User legt seine cronjobs in genau einem cronfile ab und übergibt dieses File dem cron mit "crontab meinCronfile". Die /etc/crontab lässt sich mit dem crontab-Befehl nicht starten. Das tückische am crontab ist, dass er den Inhalt ungeprüft an cron weitergibt. Man sollte allerdings den MAILTO auf den eigenen Üser setzen, sonst sieht man die Fehlermeldungen nicht, die der cron erzeugt. ME läuft Josefs Temperatur-Script überhaupt nicht! Es wird gar nicht gestartet, da der cron den Befehl gleich mit einer Fehlermeldung verwirft. Tipp: sux - kmail Einstellungen - kmail einrichten - Netzwerk - Empfang - Hinzufügen - Lokales Postfach - Mbox-Format Nach E-Mail sehen in <click> geht auch mit su - mail aber es kommt der ganze Install-Mail-Senf von SuSE. (d-return-d-...) Ich empfehle Josef dringend, die root-mail zu prüfen. Gruss, Wolfgang ps Ich lese die Liste!
-----Ursprüngliche Nachricht----- Von: Wolfgang Hinsch [mailto:wolfgang.hinsch@moebiusbau.de] Gesendet: Dienstag, 11. März 2003 16:14 An: suse-linux@suse.com Betreff: Re: Zugriff auf ttyS1
Am Die, 2003-03-11 um 15.16 schrieb Kroll, Volker:
On 2003-03-11 03:17:15, Wolfgang Hinsch wrote:
Am Die, 2003-03-11 um 11.57 schrieb Josef Thaller:
-*/01 * * * * root /srv/www/cgi-bin/temperatur/aussen.cgi
Woher stammt die Zeile oben ? crontab -l? Die Felder 1-5 steuern die Laufzeit, Feld 6 den Aufruf. Woher kommt "root"?
Das ist das Format von /etc/crontab
Startet es überhaupt?
Soweit ich Josef verstanden habe (in PM) ja. Nur die Werte werden nicht empfangen.
Hallo, also das Script läuft einwandfrei und die User Zuordnung in der Crontab funktioniert auch einwandfrei! Schreibe ich einen User rein, dann startet er das Script mit den Rechten des Users. Wie gesagt, das script läuft einwandfrei nur das Programm das dieses Script startet gibt mir beim automatischen Start keine Rückmeldung -> leider auch keine Meldung per Mail! Ich kann also nicht feststellen ob das Programm überhaupt ausgeführt wird.
Ich starte mit dem Script ein Programm im Verzeichnis /srv/www/htdocs/temperatur/digitemp in diesem Verzeichnis sind auch noch eine andere Datei die für den Betrieb des Programmes benötigt wird. Kann es sein, dass das Programm duch den automatischen Aufruf durch Cron die zweite Datei nicht findet? fg josef
Einspruch. Laut der Doku zu crontab(5) kann innerhalb einer Zeile kein User angegeben werden. Die /etc/crontab ist wahrscheinlich entweder ein Relikt vergangener SuSE-Zeiten oder eine Vorlage für irgendein Yast-Script. Jeder User legt seine cronjobs in genau einem cronfile ab und übergibt dieses File dem cron mit "crontab meinCronfile".
Die /etc/crontab lässt sich mit dem crontab-Befehl nicht starten. Das tückische am crontab ist, dass er den Inhalt ungeprüft an cron weitergibt. Man sollte allerdings den MAILTO auf den eigenen Üser setzen, sonst sieht man die Fehlermeldungen nicht, die der cron erzeugt. ME läuft Josefs Temperatur-Script überhaupt nicht! Es wird gar nicht gestartet, da der cron den Befehl gleich mit einer Fehlermeldung verwirft.
Tipp: sux - kmail Einstellungen - kmail einrichten - Netzwerk - Empfang - Hinzufügen - Lokales Postfach - Mbox-Format Nach E-Mail sehen in <click>
geht auch mit su - mail
aber es kommt der ganze Install-Mail-Senf von SuSE. (d-return-d-...)
Ich empfehle Josef dringend, die root-mail zu prüfen.
Gruss, Wolfgang
ps Ich lese die Liste!
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
On 2003-03-11 06:10:15, Josef Thaller wrote:
Ich starte mit dem Script ein Programm im Verzeichnis /srv/www/htdocs/temperatur/digitemp in diesem Verzeichnis sind auch noch eine andere Datei die für den Betrieb des Programmes benötigt wird. Kann es sein, dass das Programm duch den automatischen Aufruf durch Cron die zweite Datei nicht findet?
Ja. Ist der komplette Pfad dort angegeben? Hast Du nach allen Aufrufen von entfernten Diensten ein Die? also open FILE, "bla" or die "bla not found $!"; Wie vorhin schon geschrieben: Versuch doch mal den Teil mit Debuginfos zu versehen, der Zugriffe auf ttyS1 macht. (Sollte man eh __immer__ machen) Beginnt Dein Skript mit #!/usr/bin/perl -w siehe man perl: BUGS The -w switch is not mandatory. HTH Volker -- [ Volker Kroll [ eMail: kroll@strato.de [ Senior Developer [ Tel : 030 - 88 615 -0 [ Strato Rechenzentrum GmbH [ Web : http://www.strato.de
On Die, 11 Mär 2003 at 16:13 (+0100), Wolfgang Hinsch wrote:
Am Die, 2003-03-11 um 15.16 schrieb Kroll, Volker:
On 2003-03-11 03:17:15, Wolfgang Hinsch wrote:
Am Die, 2003-03-11 um 11.57 schrieb Josef Thaller:
-*/01 * * * * root /srv/www/cgi-bin/temperatur/aussen.cgi
Woher stammt die Zeile oben ? crontab -l? Die Felder 1-5 steuern die Laufzeit, Feld 6 den Aufruf. Woher kommt "root"?
Das ist das Format von /etc/crontab
Startet es überhaupt?
Soweit ich Josef verstanden habe (in PM) ja. Nur die Werte werden nicht empfangen.
Einspruch. Laut der Doku zu crontab(5) kann innerhalb einer Zeile kein User angegeben werden. Die /etc/crontab ist wahrscheinlich entweder ein Relikt vergangener SuSE-Zeiten oder eine Vorlage für irgendein Yast-Script. Jeder User legt seine cronjobs in genau einem cronfile ab und übergibt dieses File dem cron mit "crontab meinCronfile".
Einspruch. /etc/crontab gibt es unter Linux schon solange ich damit arbeite (IIRC 1995) und es wird auch genauso lange abgearbeitet (auch wenn ich mit dieser Konstruktion nicht glücklich bin). Und die Zeile oben ist für die /etc/crontab korrekt! man 8 cron Richtig ist allerdings, dass das crontab Kommandos nur die benutzerspezifischen Dateien anpackt (Das ist einer der Gründe, warum ich /etc/crontab hasse, ein zweiter ist das heillose Durcheinander in den man-Pages). Um dem Rätselraten ein Ende zu bereiten, empfehle ich, die crontab-Zeile wie folgt abzuändern (eine Zeile): * * * * * root /srv/www/cgi-bin/temperatur/aussen.cgi
/tmp/aussen.log 2>&1
Das "-" verhindert ja AFAIK die Protokollierung, und die Konstruktion */01 ist doppelt gemoppelt (*Führe jede Minute im Abstand von einer Minute das Script aus*). An den Anfang des Scripts würde ich noch: system ("/bin/date >>/tmp/aussen.log"); einbauen. Alle nötigen Infos sollten dann in /tmp/aussen.log stehen - wenn nicht, dann ist die Sache auch klar: Das Script wird nicht ausgeführt. Jan
Am Die, 2003-03-11 um 20.49 schrieb Jan Trippler:
On Die, 11 Mär 2003 at 16:13 (+0100), Wolfgang Hinsch wrote:
Einspruch. Laut der Doku zu crontab(5) kann innerhalb einer Zeile kein User angegeben werden. Die /etc/crontab ist wahrscheinlich entweder ein Relikt vergangener SuSE-Zeiten oder eine Vorlage für irgendein Yast-Script. Jeder User legt seine cronjobs in genau einem cronfile ab und übergibt dieses File dem cron mit "crontab meinCronfile".
Einspruch. /etc/crontab gibt es unter Linux schon solange ich damit arbeite (IIRC 1995) und es wird auch genauso lange abgearbeitet (auch wenn ich mit dieser Konstruktion nicht glücklich bin). Und die Zeile oben ist für die /etc/crontab korrekt!
man 8 cron
Stattgegeben. Habe das etwas vergessen/überlesen, sorry.
Richtig ist allerdings, dass das crontab Kommandos nur die benutzerspezifischen Dateien anpackt (Das ist einer der Gründe, warum ich /etc/crontab hasse, ein zweiter ist das heillose Durcheinander in den man-Pages).
Um dem Rätselraten ein Ende zu bereiten, empfehle ich, die crontab-Zeile wie folgt abzuändern (eine Zeile):
* * * * * root /srv/www/cgi-bin/temperatur/aussen.cgi
/tmp/aussen.log 2>&1
Das "-" verhindert ja AFAIK die Protokollierung, und die Konstruktion */01 ist doppelt gemoppelt (*Führe jede Minute im Abstand von einer Minute das Script aus*).
An den Anfang des Scripts würde ich noch: system ("/bin/date >>/tmp/aussen.log");
einbauen. Alle nötigen Infos sollten dann in /tmp/aussen.log stehen - wenn nicht, dann ist die Sache auch klar: Das Script wird nicht ausgeführt.
Full ACK Wolfgang
participants (6)
-
Adalbert Michelic
-
Jan.Trippler@t-online.de
-
Josef Thaller
-
Kroll, Volker
-
Peter Wiersig
-
Wolfgang Hinsch