crons arbeiten nicht richtig?

MPL

Neuer User
Mitglied seit
14 Jan 2008
Beiträge
21
Punkte für Reaktionen
0
Punkte
0
Guten abend miteinander...

ich hab ein kleines problem mit dem crond vom freetz

meine version: Firmware: 40.04.76freetz-devel-4670

mein problem: ich hab'n cronjo für rrd stats

daten.sh
#!/bin/sh
/usr/bin/php-cgi -f /var/media/ftp/uStor01/hdd1/test.php


test.php
PHP:
<?php
$f = file_get_contents("http://192.168.178.21/daten.htm");
$sensors = explode(";", $f);

$ow0 = explode("|", $sensors[0]);
$ow1 = explode("|", $sensors[1]);
$ow2 = explode("|", $sensors[2]);
$ow3 = explode("|", $sensors[3]);

$time = time();
$dtime = date('Y-m-d H-i-s');

$db = new PDO('sqlite:/var/media/ftp/uStor01/hdd1/avr.s3db');

$qry = $db->prepare('INSERT INTO sensors (s0,s1,s2,s3,
							temp0,temp1,temp2,temp3,
							ts, date, 
							min0, min1, min2, min3,
							max0, max1, max2, max3
						     ) VALUES (?, ?, ?, ?,
								   ?, ?, ?, ?,
								   ?, ?,
								   ?, ?, ?, ?,
								   ?, ?, ?, ?
								)');

$qry->execute(array("sensor0", "Sensor1", "Sensor2", "Sensor3",
			  $ow0[0], $ow1[0], $ow2[0], $ow3[0],
			  $time, $dtime,
			  $ow0[1], $ow1[1], $ow2[1], $ow3[1],
			  $ow0[2], $ow1[2], $ow2[2], $ow3[2]));

$s1 = str_replace(",", ".", $ow0[0]);
$s2 = str_replace(",", ".", $ow1[0]);
$s3 = str_replace(",", ".", $ow2[0]);
$s4 = str_replace(",", ".", $ow3[0]);

system("/usr/bin/rrdtool update /var/media/ftp/uStor01/hdd1/temperatur.rrd N:$s1:$s2:$s3:$s4");
?>


wenn ich das script per shell ausführe...

/var/media/ftp/uStor01/hdd1 # php-cgi -f test.php

klappt es...

Code:
/var/media/ftp/uStor01/hdd1 # ls -l
-rw-r--r--    1 root     root         18610 Apr 18 01:00 aussen.png
-rwxr-xr-x    1 mpl      mpl          95232 Apr 18 01:05 avr.s3db
-rwxr-xr-x    1 root     root           585 Apr 14 00:04 create.sh
-rwxr-xr-x    1 mpl      mpl             67 Apr 18 00:55 daten.sh
-rwxr-xr-x    1 mpl      mpl           1151 Apr 18 00:59 graph.sh
-rw-r--r--    1 root     root         18421 Apr 18 01:00 innen.png
-rw-r--r--    1 root     root       2032480 Apr 18 01:05 temperatur.rrd
-rw-r--r--    1 mpl      mpl           1102 Apr 18 00:45 test.php

datenbank avr.s3db und temperatur.rrd haben die aktuelle uhrzeit

wenn das ganze jedoch als cron passieren soll... tut sich nichts ich habe heute morgen in die datenbank und auf die timestamps geschaut und es hat sich seit meinem letzen manuellen update nichts getan

das ist mein cronjob:

*/2 * * * * /var/media/ftp/uStor01/hdd1/daten.sh

laut log wird der cron ausgeführt aber es tut nichts?

Code:
Apr 18 01:10:01 fritz cron.info crond[978]: crond: USER root pid 2360 cmd /var/media/ftp/uStor01/hdd1/daten.sh

/var/media/ftp/uStor01/hdd1 # ls -l
-rwxr-xr-x    1 mpl      mpl          95232 Apr 18 01:05 avr.s3db
-rw-r--r--    1 root     root       2032480 Apr 18 01:05 temperatur.rrd
 
Soso na dann nochmal:

Ich hab da ein Problem mit dem crondaemon.

Ich hab ein PHP script, welches Daten von einem Webserver holt und per system() die rrd Datenbank aktualisiert.

Wenn ich das Script per Bash ausführe:

daten.sh:
Code:
#!/bin/sh
/usr/bin/php-cgi -f /var/media/ftp/uStor01/hdd1/test.php


funktioniert es.

Jedoch funktioniert es nicht wenn es per Cronjob alle 2min ablaufen soll:

Code:
*/2 * * * * /var/media/ftp/uStor01/hdd1/daten.sh

so habe ich den Cronjob im Webinterface eingetragen.

hier noch ein Auszug aus dem syslog welcher zeigt das der cron ausgeführt wird aber anscheinend arbeitet das script nicht

Apr 18 01:10:01 fritz cron.info crond[978]: crond: USER root pid 2360 cmd /var/media/ftp/uStor01/hdd1/daten.sh


/var/media/ftp/uStor01/hdd1 # ls -l
-rwxr-xr-x 1 mpl mpl 95232 Apr 18 01:05 avr.s3db
-rw-r--r-- 1 root root 2032480 Apr 18 01:05 temperatur.rrd

wenn man die Uhrzeiten vergleicht sieht man dass das script nicht ausgeführt wurde.
 
Ich glaube nicht, daß Du ein Problem mit dem cron Daemon hast, weil der, wie Du selbst festgestellt hast, das Programm aufruft und damit seine Aufgabe erfüllt hat.

Was passiert, wenn Du das Skript so aufrufst:
Code:
/var/media/ftp/uStor01/hdd1/daten.sh
 
Code:
/var/mod/root # /var/media/ftp/uStor01/hdd1/daten.sh
 /var/mod/root # ls -l /var/media/ftp/uStor01/hdd1/
-rwxr-xr-x    1 root     root         95232 Apr 18 18:40 avr.s3db
-rw-r--r--    1 root     root       2032480 Apr 18 18:40 temperatur.rrd


so funktioniert es auch

hier noch ein Auszug aus /var/spool/cron/crontabs/root
Code:
*/2 * * * * /var/media/ftp/uStor01/hdd1/daten.sh
 
Bitte ruf das Script noch einmal per "sh -x" auf. Wobei, das hilft ja nicht, weil du dieses komische php im Hintergrund nutzt. Ein Shellscript wäre da hervorragend mit zu "debuggen"
 
ja...

Code:
/ # sh -x /var/media/ftp/uStor01/hdd1/daten.sh 
+ /usr/bin/php-cgi -f /var/media/ftp/uStor01/hdd1/test.php

so wie ich das beobachtet habe scheint es das der crond zwar das script ausführt aber nicht weiss das er das als shellscript ausführen soll?

wenn ich in cron interface noch SHELL=/bin/sh davor setze hilft es auch nicht weiter ...
 
Nee, der cron läuft, das Shellscript wird auch ausgeführt. Was dien php-Zeugs da macht weiss ich allerdings nicht.
 
Dann schreib doch in deine sh mal noch was dazu...
Code:
date >> /var/tmp/debug.log
Und dann schaust du, ob das Skript ausgeführt wird. Vielleicht kann man auch die php Ausgabe so umleiten.

Außerdem gibts beim crond verschiedene Debug-Optionen.

MfG Oliver
 
okay hab ich:

Code:
#!/bin/sh
date >> /var/tmp/debug.log
/usr/bin/php-cgi -f /var/media/ftp/uStor01/hdd1/test.php
date >> /var/tmp/debug.log

wenn ich das script manuell ausführe:

Sun Apr 18 20:18:44 CEST 2010
Sun Apr 18 20:18:47 CEST 2010

3sek benötigt das php script....

wenn das ganze per cron ablaufen soll:

Sun Apr 18 20:20:01 CEST 2010
Sun Apr 18 20:20:01 CEST 2010

sprich er führt das phpscript nicht aus... 0sek unterschied
 
'Wo liegt denn eigentlich dein php-cgi?

Code:
ls -l /usr/bin/php-cgi
 
Code:
/var/mod/root # /usr/bin/php-cgi -v
PHP 5.2.13 (cgi-fcgi) (built: Apr  5 2010 22:24:59)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies


hab jetzt versucht die shebang line vom phpscript abzuändern und das script per shell direkt aufrufen
PHP:
#!/usr/bin/php-cgi
<?php
$f = file_get_contents("http://192.168.178.21/daten.htm");
.
.
.


aber auch so arbeitet crond das script nicht ab :/
 
Wie schon geschrieben startet cron Dein Skript, das sieht man doch im Syslog.

Rufe es mal auf mit:
Code:
env - /var/media/ftp/uStor01/hdd1/daten.sh
# bzw.
env - /usr/bin/php-cgi -f /var/media/ftp/uStor01/hdd1/test.php
 
habs heinbekommen:

hab en shellscript gefunden welches die selbe arbeit tut
Code:
#!/bin/sh


MYHOME=/var/media/ftp/uStor01/hdd1
COUNT=2
OFFSET=8
cd $MYHOME

wget -q http://192.168.178.21/daten.csv

IDUM=0
while [ $IDUM -lt $COUNT ] 
    do

    IDUM=`expr $IDUM + 1`
    IDUMOFFSET=`expr $IDUM + $OFFSET`

    ADRESSE=`head -n1 daten.csv | cut -d ';' -f $IDUMOFFSET`

    DUMWERT=`tail -1 daten.csv | cut -d ';' -f $IDUMOFFSET`
    AWERT=`echo $DUMWERT | cut -d ',' -f 1`
    BWERT=`echo $DUMWERT | cut -d ',' -f 2`
    WERT=$AWERT.$BWERT

    /usr/bin/rrdtool update $MYHOME/$ADRESSE.rrd N:$WERT

    #DATE=`/bin/date "+%d.%m.%Y %H:%M:%S"`
    #echo "$DATE $ADRESSE $WERT" >> $MYHOME/temp.log
    #echo "$DATE $ADRESSE $WERT"

  done 

rm $MYHOME/daten.csv


lag wohl doch am php interpreter...
 
Ich hätte ja nicht vermutet, daß dieses Skript das Gleiche tut wie das PHP-Programm oben.

Aber dann kannst Du noch den Titel ergänzen mit "ungelöst, Antwort interessiert nicht mehr".
 
Tut es doch auch nicht. Schreibt jas die Daten in eine CSV-Datei, und nicht wie das PHP-Script in eine sqlite3-DB.
Aber wenn das reicht, ist PHP eindeutig oversized...
 
es liest die daten aus der csv und schreibt sie in die rrd ... denoch wäre sqlite von nöten... das dumpen in ne sql db werde ich dann wohl nur lokal machen
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.