Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Shellscript will nicht als cronjob

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Holger
Gast





BeitragVerfasst am: 06. März 2003 19:27   Titel: Shellscript will nicht als cronjob

Hi Leutz!

Bin echt ratlos und hoffe ihr könnt mir helfen. Ich hab jetzt alle FAQs, HOWTOs und RTFM uns STFW durch...

Folgendes:
Ich betreibe einen LINUX-Rechner als Router für DSL und Fileserver für ein kleines Hausnetzwerk (2 Rechner). Die Kiste steht im Keller und stört keinen. Dennoch denke ich, wenn nachts kein Client mehr an ist, kann die Kiste auch schlafen gehen. Idee ist also: Ich lass stündlich ein Script laufen, daß ein ping auf alle Clients macht und dafür sorgt das der Server sich selber runterfährt.

Dazu habe ich folgendes Script geschrieben (geht vielleicht auch einfacher, aber verzeiht mir, bin noch Anfänger )

Zur Erklärung: Ich mache einen Ping auf den Client, und hol mir durch tail/head/cut die Zahl der empfangenen Pakete. Wenn die 0 ist, ist der Client nicht mehr da. Wenn beide Clients weg sind, mache ich einen shutdown.

#!/bin/bash
ping 192.168.0.13 -w 1 > /var/log/ping_13.txt
tail -2 /var/log/ping_13.txt | head -1 > /var/log/ping_13.txt
cut -c24 /var/log/ping_13.txt > /var/log/client_dead_13.txt
ping 192.168.0.14 -w 1 > /var/log/ping_14.txt
tail -2 /var/log/ping_14.txt | head -1 > /var/log/ping_14.txt
cut -c24 /var/log/ping_14.txt > /var/log/client_dead_14.txt
# wenn alle pakete bei allen clients verloren gingen -> Rechner runterfahren
a=$(more /var/log/client_dead_13.txt)
b=$(more /var/log/client_dead_14.txt)
if [ $a -eq 0 -a $b -eq 0 ]
then
echo "$(date) - Clients down" >> /var/log/ping_shutdown.log
/sbin/shutdown -h now
else
echo "$(date) - Clients alive : $a $b" >> /var/log/ping_shutdown.log
fi
#EOF

Das hab ich unter /etc/cron.hourly geparkt (RedHat Cool. Soweit so gut.
Das Script läuft auch brav jede Stunde. Problem ist nur, es läuft nur fehlerlos, wenn ich es als root starte. Wenn dieses Script durch cron initialisiert wird bekommt root folgende Fehlermeldung per mail:

From root@BASEMENT Thu Mar 6 19:02:03 2003
Return-Path: <root@BASEMENT>
Received: from BASEMENT (localhost.localdomain [127.0.0.1])
by BASEMENT (8.12.5/8.12.5) with ESMTP id h26I2323001960
for <root@BASEMENT>; Thu, 6 Mar 2003 19:02:03 +0100
Received: (from root@localhost)
by BASEMENT (8.12.5/8.12.5/Submit) id h26I23uw001958
for root; Thu, 6 Mar 2003 19:02:03 +0100
Date: Thu, 6 Mar 2003 19:02:03 +0100
Message-Id: <200303061802.h26I23uw001958@BASEMENT>
From: root@BASEMENT (Cron Daemon)
To: root@BASEMENT
Subject: Cron <root@basement> run-parts /etc/cron.hourly
X-Cron-Env: <SHELL=/bin/bash>
X-Cron-Env: <PATH=/sbin:/bin:/usr/sbin:/usr/bin>
X-Cron-Env: <MAILTO=root>
X-Cron-Env: <HOME=/>
X-Cron-Env: <LOGNAME=root>

/etc/cron.hourly/ping_shutdown.sh:

/etc/cron.hourly/ping_shutdown.sh: line 11: [: too many arguments

--
Die Ausgabe in /va/log/ping_shutdown.log sieht für jede Stunde so aus:
Thu Mar 6 19:01:02 CET 2003 - Clients alive : ::::::::::::::
/var/log/client_dead_13.txt
::::::::::::::
1 ::::::::::::::
/var/log/client_dead_14.txt
::::::::::::::

Wenn root dieses Script startet, ist alles ganz normal:
Mit Mär 5 22:15:18 CET 2003 : Clients alive

Rechte an allen Dateien habe ich mitlerweile großzügig vergeben.

WARUM KLAPPT DAS NICHT ALS CRONJOB???!!!

Wär echt klasse, wenn mir jeand einen Tip geben könnte.

Gruß

Holger
 

hjb
Pro-Linux


Anmeldungsdatum: 15.08.1999
Beiträge: 3236
Wohnort: Bruchsal

BeitragVerfasst am: 07. März 2003 13:22   Titel: Re: Shellscript will nicht als cronjob

Hi!

Da der Fehler in Zeile 11 ist, ist entweder $a oder $b nicht definiert. In Zeile 9 und 10 verwendest du "more", um diese zu initialisieren - warum nicht "cat"?

Außerdem hat nur Root das Recht, den Rechner herunterzufahren - warum also das Skript nicht als Root laufen lassen? Zudem schreibst du in /var/log, das ist ein Verzeichnis, in dem kein normaler User Schreibrechte haben darf - evtl. nicht mal Leserechte.

Faustregel: Wenn du etwas als normaler User machst, dann sieh zu, daß es komplett im Homedirectory abläuft.

Gruß,
hjb
_________________
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger

Holger
Gast





BeitragVerfasst am: 07. März 2003 21:06   Titel: Re: Shellscript will nicht als cronjob

Hi!

Danke für die Antwort! Ich hab mein script mitlerweile umgebaut, nun funzts einwandfrei:

#!/bin/bash
a=$(/bin/ping 192.168.0.13 -w 1 | grep transmitted | cut -c24)
b=$(/bin/ping 192.168.0.14 -w 1 | grep transmitted | cut -c24)
if [ $a -eq 0 -a $b -eq 0 ]
then
echo "$(date) - Clients down" >> /var/log/ping_shutdown.log
/sbin/shutdown -h now
else
echo "$(date) - Clients alive : $a $b" >> /var/log/ping_shutdown.log
fi
#EOF

Der cronjob wurde schon vorher als root gestartet, drum hats mich ja auch gewundert, daß das auf der Konsole funktioniert hat, jedoch nicht als cron. Die Rechte an /var/log sind auch vergeben.

Gruß

Holger
 

Udo M.
Gast





BeitragVerfasst am: 09. März 2003 21:04   Titel: Re: Shellscript will nicht als cronjob

> a=$(/bin/ping 192.168.0.13 -w 1 | grep transmitted | cut -c24)

Solches geht doch viel einfacher! Warum noch 2 weitere Programme verpipen, wenn es der Returncode bring? Kleiner Denkanstoß:

if ping -c 1 -w 1 HOST; then echo 'er lebt'; else echo 'nix da'; fi
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy