Shell-Skript unter cron

Hallo,
unter Debian habe ich ein Mini-Skript erstellt, dass die IP der ppp Verbindungen loggen soll.

Rufe ich das Skript mit „/pfad/zum/./script.sh“
auf, dann funktioniert es genauso wie es soll.

Lasse ich das Script über crontab oder bei einer ppp-Verbindung (/etc/ppp/ip-up.d/skript) aufrufen, funktioniert es nicht.

Hier das script:

#! /bin/bash
IP="$(ifconfig | grep P-z-P)"
if [-n „$IP“]; then
DATE=$(date +%F/%X)
echo „$DATE $IP“ >> /var/log/ips.log
fi

Aus irgendeinem Grund scheinen alle Aufrufe wie ifconfig oder route nicht über cron zu funktionieren
(Ändere ich das Skript in z.B. „echo hallo >> /var/log/ips.log“ funktioniert der cron-Aufruf).

Woran kann das liegen?
Ich habe keine Idee dazu.

Grüsse
K.

Hallo,
unter Debian habe ich ein Mini-Skript erstellt, dass die IP
der ppp Verbindungen loggen soll.

Rufe ich das Skript mit „/pfad/zum/./script.sh“
auf, dann funktioniert es genauso wie es soll.

Lasse ich das Script über crontab oder bei einer
ppp-Verbindung (/etc/ppp/ip-up.d/skript) aufrufen,
funktioniert es nicht.

Hier das script:

#! /bin/bash
IP="$(ifconfig | grep P-z-P)"
if [-n „$IP“]; then
DATE=$(date +%F/%X)
echo „$DATE $IP“ >> /var/log/ips.log
fi

Aus irgendeinem Grund scheinen alle Aufrufe wie ifconfig oder
route nicht über cron zu funktionieren

Richtig.

Das cron environment hat keinen PATH gesetzt. Entweder Du holst das nach. Oder Du verwendest bei allen befehlen (auch denen im Script) den vollen Pfadnamen.

HTH

Sebastian

Jetzt habe ich den PATH so geändert, wie ich ihn als root mit „echo $PATH“ bekomme.

Eintrag Anfang crontab:

Shell variable for cron

SHELL=/bin/sh

PATH variable for cron

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

m h dom mon dow command


läuft trotzdem nicht (… als cron)

und auch wenn ich die vollständigen Pfade zu den Befehlen eintrage funktionierts nicht (… als cron).

Der Befehl:
„echo $(ifconfig | grep P-z-P) >> /var/log/ips.log“
wird als cron einfach nicht ausgeführt.

Skript:

#! /bin/sh

IP="$(ifconfig | grep P-z-P)"

if [-n „$IP“]; then
DATE=$(date +%F/%X)
echo „$DATE $IP“ >> /var/log/ips.log
fi

#echo $PATH >> /var/log/ips.log
#echo $SHELL >> /var/log/ips.log
#whoami >> /var/log/ips.log
echo $(ifconfig | grep P-z-P) >> /var/log/ips.log


Richtig.

Das cron environment hat keinen PATH gesetzt. Entweder Du
holst das nach. Oder Du verwendest bei allen befehlen (auch
denen im Script) den vollen Pfadnamen.

HTH

Sebastian

Während

„ifconfig >> /var/log/ips.log“

alle Schnittstellen in ips.log schreibt (eth0,wlan0,ppp0)

schreibt:

echo $(ifconfig) >> /var/log/ips.log

nur eine Zeile über eth0 in die Datei.

Wieso gibt es denn zwischen diesen Aufrufen einen Unterschied?

schreibt:

echo $(ifconfig) >> /var/log/ips.log

nur eine Zeile über eth0 in die Datei.

Sicher? Nicht, wenn du dir die Datei mit less /var/log/ips.log in der Konsole ausgeben lässt.

Die Erklärung findet sich unter man echo (ziemlich weit hinten - erst in der vierten Zeile).

Gruss
Schorsch

schreibt:

echo $(ifconfig) >> /var/log/ips.log

nur eine Zeile über eth0 in die Datei.

Sicher? Nicht, wenn du dir die Datei mit less /var/log/ips.log
in der Konsole ausgeben lässt.

Ja, Du hast recht… :o)
Trotzdem bleibt es mir mysteriös, dass das Skript mit manuellem Aufruf läuft … und über cron läufts nicht.

Ich vermute es hat was mit der Pipe | zu tun.
Habe aber keine Ahnung was genau - und wie ichs lösen kann.

Die Erklärung findet sich unter man echo (ziemlich weit hinten

  • erst in der vierten Zeile).

Gruss
Schorsch

Trotzdem bleibt es mir mysteriös, dass das Skript mit
manuellem Aufruf läuft … und über cron läufts nicht.

Ich vermute es hat was mit der Pipe | zu tun.

Glaub ich nicht. Sorg mal dafür, dass die letzte Zeile in der Crontab mit einem Zeilenumbruck abgeschlossen wird. Dann sollt’s tun.

Gruss
Schorsch

Trotzdem bleibt es mir mysteriös, dass das Skript mit
manuellem Aufruf läuft … und über cron läufts nicht.

Ich vermute es hat was mit der Pipe | zu tun.

Glaub ich nicht. Sorg mal dafür, dass die letzte Zeile in der
Crontab mit einem Zeilenumbruck abgeschlossen wird. Dann
sollt’s tun.

Die letzte Zeile ist mit Zeilenumbruch abgeschlossen.
Das Skript funktioniert ja auch in abgeänderter Form per cron.
Aber der Ausdruck:
„ifconfig | grep P-z-P“
funktioniert einfach nicht - in keiner Form ($(…) , etc.).

Grüsse
K.

Die letzte Zeile ist mit Zeilenumbruch abgeschlossen.
Das Skript funktioniert ja auch in abgeänderter Form per cron.

Sorry, hatte ich dich falsch verstanden.

Aber der Ausdruck:
„ifconfig | grep P-z-P“
funktioniert einfach nicht - in keiner Form ($(…) , etc.).

Kann ich nicht nachvollziehen. Mit dem überflüssigen echo $() oder in der obigen Form, direkt in der crontab oder in einem nachgelagerten Script… der Ausdruck wird bei mir, ebenfalls auf einem Debian-System (Etch), immer erwartungsgemäß ausgeführt. Wobei das Grep nach P-z-P bei mir erwartungsgemäß keinen Treffer zurückliefert, aber in dieser Zeichengruppe sehe ich nichts, was einen Erfolg hindern könnte.

Gruss
Schorsch

Hallo,

Die letzte Zeile ist mit Zeilenumbruch abgeschlossen.
Das Skript funktioniert ja auch in abgeänderter Form per cron.
Aber der Ausdruck:
„ifconfig | grep P-z-P“
funktioniert einfach nicht - in keiner Form ($(…) , etc.).

Abgesehen davon, daß „funktioniert nicht“ keine sinnvolle Fehlerbeschribung ist: ich könnte mir vorstellen, daß cron vielleicht eine andere Locale har und der String „P-z-P“ anders lautet.

\* \* \* \* \* /sbin/ifconfig | /usr/bin/logger -t Test

Was siehst Du im Syslog?

HTH,

Sebastian

Hallo,

Abgesehen davon, daß „funktioniert nicht“ keine sinnvolle
Fehlerbeschribung ist:

Sorry, hatte in den anderen Postings das Problem schon genauer beschrieben, deshalb hier etwas salopper … :o)

ich könnte mir vorstellen, daß cron
vielleicht eine andere Locale har und der String „P-z-P“
anders lautet.

Das Skript funktioniert genauso wie es soll, wenn ich es manuell aufrufe (root).

Die Shell/Pfad-Variabeln in Cron sind genauso gesetzt wie unter root.

Ein anderer Skriptcode (echo hallo >> …) wird von Cron problemlos ausgeführt.

Nur „ifconfig | grep …“ liefert nicht das Ergebnis wie unter manueller Ausführung.

Syslog am Ende…

Grüsse
K.

* * * * * /sbin/ifconfig | /usr/bin/logger -t Test

Was siehst Du im Syslog?

Syslog:

Sep 25 10:54:53 Rechner Test: eth0 Protokoll:Ethernet Hardware Adresse 00:0A:5E:20:26:10
Sep 25 10:54:53 Rechner Test: inet Adresse:192.168.100.250 Bcast:192.168.100.255 Maske:255.255.255.0
Sep 25 10:54:53 Rechner Test: inet6 Adresse: fe80::20a:5eff:fe20:2610/64 Gültigkeitsbereich:Verbindung
Sep 25 10:54:53 Rechner Test: UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Sep 25 10:54:53 Rechner Test: RX packets:469801 errors:0 dropped:0 overruns:0 frame:0
Sep 25 10:54:53 Rechner Test: TX packets:659388 errors:0 dropped:0 overruns:0 carrier:0
Sep 25 10:54:53 Rechner Test: Kollisionen:0 Sendewarteschlangenlänge:1000
Sep 25 10:54:53 Rechner Test: RX bytes:81338037 (77.5 MiB) TX bytes:653624222 (623.3 MiB)
Sep 25 10:54:53 Rechner Test: Interrupt:11
Sep 25 10:54:53 Rechner Test:
Sep 25 10:54:53 Rechner Test: lo Protokoll:Lokale Schleife
Sep 25 10:54:53 Rechner Test: inet Adresse:127.0.0.1 Maske:255.0.0.0
Sep 25 10:54:53 Rechner Test: inet6 Adresse: ::1/128 Gültigkeitsbereich:Maschine
Sep 25 10:54:53 Rechner Test: UP LOOPBACK RUNNING MTU:16436 Metric:1
Sep 25 10:54:53 Rechner Test: RX packets:328585 errors:0 dropped:0 overruns:0 frame:0
Sep 25 10:54:53 Rechner Test: TX packets:328585 errors:0 dropped:0 overruns:0 carrier:0
Sep 25 10:54:53 Rechner Test: Kollisionen:0 Sendewarteschlangenlänge:0
Sep 25 10:54:53 Rechner Test: RX bytes:305632051 (291.4 MiB) TX bytes:305632051 (291.4 MiB)
Sep 25 10:54:53 Rechner Test:
Sep 25 10:54:53 Rechner Test: ppp0 Protokoll:stuck_out_tongue:unkt-zu-Punkt Verbindung
Sep 25 10:54:53 Rechner Test: inet Adresse:81.171.xx.xx P-z-P:xxx.xxx.84.232 Maske:255.255.255.255
Sep 25 10:54:53 Rechner Test: UP PUNKTZUPUNKT RUNNING NOARP MULTICAST MTU:1492 Metric:1
Sep 25 10:54:53 Rechner Test: RX packets:397931 errors:0 dropped:0 overruns:0 frame:0
Sep 25 10:54:53 Rechner Test: TX packets:352713 errors:0 dropped:0 overruns:0 carrier:0
Sep 25 10:54:53 Rechner Test: Kollisionen:0 Sendewarteschlangenlänge:3
Sep 25 10:54:53 Rechner Test: RX bytes:444198818 (423.6 MiB) TX bytes:113027956 (107.7 MiB)
Sep 25 10:54:53 Rechner Test:
Sep 25 10:54:53 Rechner Test: wlan0 Protokoll:Ethernet Hardware Adresse 00:14:smiley:1:31:5D:B6
Sep 25 10:54:53 Rechner Test: inet Adresse:192.168.1.250 Bcast:192.168.1.255 Maske:255.255.255.0
Sep 25 10:54:53 Rechner Test: inet6 Adresse: fe80::214:d1ff:fe31:5db6/64 Gültigkeitsbereich:Verbindung
Sep 25 10:54:53 Rechner Test: UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Sep 25 10:54:53 Rechner Test: RX packets:398842 errors:0 dropped:0 overruns:0 frame:0
Sep 25 10:54:53 Rechner Test: TX packets:352993 errors:0 dropped:0 overruns:0 carrier:0
Sep 25 10:54:53 Rechner Test: Kollisionen:0 Sendewarteschlangenlänge:1000
Sep 25 10:54:53 Rechner Test: RX bytes:453024138 (432.0 MiB) TX bytes:120796427 (115.2 MiB)
Sep 25 10:54:53 Rechner Test: Interrupt:9 Speicher:f5000400-f5000425
Sep 25 10:54:53 Rechner Test: