[gelöst] Autoshutdown eines Servers - Cronjob geht nicht ...

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
rhHeini
Beiträge: 2729
Registriert: 20.04.2006 20:44:10

[gelöst] Autoshutdown eines Servers - Cronjob geht nicht ...

Beitrag von rhHeini » 20.04.2006 23:59:09

Hallo allerseits,

das ist mein erster Beitrag in diesem Forum, bin auch mit Linux noch recht frisch, der c't-Server ist mein erstes Linux/Debian-Projekt. Damit der Server nachts Ruhe gibt und nicht unnötig Strom verbraucht, soll er sich automatisch runterfahren wenn keiner der Clienten mehr am Netz ist. Der Server wurde mit der c't-CD aufgesetzt, dann mit Sarge 3.1r1 von DVD auf aktuellen Stand gebracht.

Habe fleissig gelesen und hier im Forum ein Script als Grundlage für mein Autoshutdown aufgetrieben. Da meine Umsetzung nicht auf Anhieb ging, sind da einige Zeilen für erweiterte Ausgaben zur Fehlersuche eingeflossen.

Stand der Dinge:
- Das Script läuft bei direkten Aufruf mit und ohne Host durch und tut das was es soll: wenn mein W2k-Client online ist, wird das erkannt, wenn er off ist, fährt der Server auch brav runter.
- Als cronjob kommt er im Off-Fall auch in den Zweig wo er ins syslog schreibt, der Server geht aber nicht runter, siehe syslog-Printout unten.

Jetzt weiss ich nicht mehr weiter. Das Script läuft als root, also müssten doch die Rechte zum Shutdown da sein, Fehlermeldungen bekomme ich keine. Was hab ich da übersehen?

Ich hab das Script, die Rechte, die crontab und auszugsweise das Syslog angehängt.

Hinweise zur weiteren Fehlersuche/beseitung sind sehr willkommen.

Mfg Rolf

PS: nicht über die Zeitstempel wundern, ich habe wohl auch noch ein Problem mit der Umstellung auf die Sommerzeit.

Das Script:

Code: Alles auswählen

tux:/usr/local/sbin# cat autoshutdown.sh
#!/bin/bash

echo "Starting autoshutdown.sh ..."

# Liste der zu überwachenden Computer
IP1=x.x.x.1
IP2=x.x.x.2
IP3=x.x.x.3

if (ping -c 3 $IP1 || ping -c 3 $IP2 || ping -c 3 $IP3 ||\
    (echo "90 Sekunden Tiefschlaf"; sleep 90; ping -c 3 $IP1) || ping -c 3 $IP2 || ping -c 3 $IP3)
then
    echo "Mindestens 1 Client am Netz. "
else
    echo "Alle Clients offline, Server wird heruntergefahren. "
    # Eintrag ins Logfile
    echo "Alle Clients offline, Server wird heruntergefahren. " | logger -i -t autoshutdown.sh
    shutdown -h 1
fi

echo "Ende von autoshutdown.sh ..."

exit 0

Der Output bei direktem Start, ein Client ist online:

Code: Alles auswählen

tux:/usr/local/sbin# ./autoshutdown.sh
Starting autoshutdown.sh ...
PING x.x.x.1 (x.x.x.1) 56(84) bytes of data.
64 bytes from x.x.x.1: icmp_seq=1 ttl=128 time=0.421 ms
64 bytes from x.x.x.1: icmp_seq=2 ttl=128 time=0.442 ms
64 bytes from x.x.x.1: icmp_seq=3 ttl=128 time=0.530 ms

--- x.x.x.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.421/0.464/0.530/0.050 ms
Mindestens 1 Client am Netz.
Ende von autoshutdown.sh ...

Die Rechte des Scripts:

Code: Alles auswählen

tux:/usr/local/sbin# ls -la
insgesamt 12
drwxrwsr-x  2 root staff 4096 2006-04-19 20:30 .
drwxrwsr-x  9 root staff 4096 2006-03-14 20:23 ..
-rwx------  1 root staff  588 2006-04-20 22:32 autoshutdown.sh

Output der Crontab

Code: Alles auswählen

tux:/# crontab -l
*/10 * * * * /usr/local/sbin/autoshutdown.sh

Syslog (Hosts an) [1]

Edit by Snoopy:
Bitte grosse Ausgaben von Configs oder Logs ins NoPaste [2] schieben und in den Thread verlinken.
Siehe auch die Verhaltensregeln des Forums [3]


[1] http://nopaste.debianforum.de/3045
[2] http://nopaste.debianforum.de/
[3] http://wiki.debianforum.de/debianforum. ... tensregeln
Zuletzt geändert von rhHeini am 21.04.2006 21:31:51, insgesamt 1-mal geändert.

Benutzeravatar
Snoopy
Beiträge: 4297
Registriert: 17.11.2003 18:26:56
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rh.- Pflz.

Beitrag von Snoopy » 21.04.2006 07:02:32

Hi und herzlich Willkommen im Forum ! :)

Bedenke:
Ein Cronjob ist etwas Anderes, als die Ausführung desselben Skripts auf einer Shell.
Soll heissen...wenn Du das Teil "per Hand" aufrufst, ist es etwas ganz Anderes, als wenn der Daemon das Teil um eine bestimmte Uhrzeit aufruft.

Weil:
Ein Cronjob kennt das Environment nicht und findet somit die Befehle nicht.
Das geht soweit, dass ein einfacher shutdown quasi mit einem Command not found zurückkommt.

Also....entweder Du gibst die Befehle mit ihrem kompletten Pfad an z.B. shutdown als

Code: Alles auswählen

/sbin/shutdown
oder Du gibst in dem Skript Pfade mit, in denen es die nötigen Befehle findet z.B.

Code: Alles auswählen

#!/bin/sh

# Pfade setzen
PATH=/sbin:/bin:/usr/bin:/usr/sbin:/usr/bin/X11:

# Hier fängt dann Dein eigentliches Skript an

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Re: Autoshutdown eines Servers - Cronjob geht nicht durch

Beitrag von roli » 21.04.2006 09:16:51

Herzlich Willkommen,

fuer dein erstes Posting ist es echt gelungen, klare Frage, ausreichende Info, super weiter so.
rhHeini hat geschrieben: Jetzt weiss ich nicht mehr weiter. Das Script läuft als root, also müssten doch die Rechte zum Shutdown da sein, Fehlermeldungen bekomme ich keine. Was hab ich da übersehen?
Da du in der Crontab weder STDOUT noch STDERR irgendwohin umgeleitet hast, sollte der User in dessen Crontab du den Job eingetragen hast (also root), eventuell angefallenen Output per Mail bekommen. Wenn's nicht laeuft, was wie Snoopy schon geschrieben hat wohl an den nicht vorhandenen Environment Variablen liegt, das wird das Script schon eine Fehlermeldung produzieren, die dann halt in der Mailbox von Root liegt. Wenn das nicht so sein sollte, haeng einfach ein ">/root/shutdown.out 2>&1" an den cronjob an. Dann kannst du nach den naechsten booten alle angefallenen Meldungen (incl. Fehlermeldungen) in der Datei "/root/shutdown.out" sehen.
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

rhHeini
Beiträge: 2729
Registriert: 20.04.2006 20:44:10

Beitrag von rhHeini » 21.04.2006 21:31:09

Danke Euch beiden, der Autoshutdown funktioniert jetzt. Es war der fehlende Pfad.

Ich kriege zwar immer noch keine Mail als root, obwohl ich irgendwo in eine cron zugehörigen Datei nach einer Anleitung MAILTO=root eingetragen habe, kann es jetzt aus dem Stand nicht mehr rekonstruieren wo das war. Muss da noch mal nachgraben, die Befehlshistorie hat mir nicht weitergeholfen.

Schönes Wochenende, Mfg Rolf

Antworten