Server runterfahren via crontab

Hallo.

Ich will ein SUSE 9.0 via crontab so einstellen, dass es um 18:30 Uhr Systemzeit erst den Befehl ‚su - nw4adm -c „stopsap nw4host“‘ und um 18:45 Uhr den root-Befehl ‚shutdown -h now‘ ausführt. stopsap ist übrigens ein Skript für den Benutzer nw4adm (normaler Linux Benutzer) im Verzeichnis /sapmnt/NW4/exeU

Zu diesem Zweck habe ich (als noch eingeloggter root) die crontab wie folgt konfiguriert:

30 18 \* \* \* su - nw4adm -c "stopsap nw4host"
45 18 \* \* \* root /sbin/shutdown -h now

Allerdings musste ich erst den cron-Prozess in YAST2 killen damit ‚cron restart‘ Wirkung (=keine Fehlermeldung von wg. verwendetem Prozess) gezeigt hat.

Okay, die Frage: funktioniert das überhaupt (der Test mit der root-Konsole verlief jedenfalls erfolgreich) und gibt es eine noch elegantere Lösung ?
Eleganter wäre z.B. das Beenden des SAP Server Programms als nw4adm und das darauffolgende Herunterfahren des Systems als ebendieser via sudo…

Freundlich fragend M.L., der auch schon Google angestrengt hat

***Quellen***
http://www.linuxclub.de
http://www.linux-fuer-alle.de
http://www.martincordova.com/docs/suse-install.pdf

Zu diesem Zweck habe ich (als noch eingeloggter root) die
crontab wie folgt konfiguriert:

30 18 * * * su - nw4adm -c „stopsap nw4host“
45 18 * * * root /sbin/shutdown -h now

Eigentlich sollte es in der ersten Zeile heissen:
30 18 * * * nw4adm stopsap nw4host

Nach den Zeitangaben kommt der Benutzer, als der das nachfolgende Kommando ausgeführt wird. Außerdem solltest du den Kram eventuell in eine eigene Datei unter /etc/cron.d stecken, /etc/crontab ist dafür weniger geeignet weil die auch durchaus mal überschrieben werden kann.

Allerdings musste ich erst den cron-Prozess in YAST2 killen
damit ‚cron restart‘ Wirkung (=keine Fehlermeldung von wg.
verwendetem Prozess) gezeigt hat.

Normalerweise sollte cron auch jede Minute von sich aus auf Veränderungen an den diversen Tabellen prüfen und muss nicht neu gestartet werden.

crontab Syntax?

Eigentlich sollte es in der ersten Zeile heissen:
30 18 * * * nw4adm stopsap nw4host

Nach den Zeitangaben kommt der Benutzer, als der das
nachfolgende Kommando ausgeführt wird. Außerdem solltest du
den Kram eventuell in eine eigene Datei unter /etc/cron.d
stecken, /etc/crontab ist dafür weniger geeignet weil die auch
durchaus mal überschrieben werden kann.

Hi Nicos,
hab ich da was verpasst oder hält LINUX sich nicht an die übliche Syntax für crontab:

(aus man crontab auf AIX, kenne ich aber so auch von Solaris und anderen *IXen):

...

The crontab File Entry Format

A crontab file contains entries for each cron job. Entries are
separated by newline characters. Each crontab file entry contains
six fields separated by spaces or tabs in the following form:

minute hour day\_of\_month month weekday command

These fields accept the following values:
minute 0 through 59
hour 0 through 23
day\_of\_month 1 through 31
month 1 through 12
weekday 0 through 6 for Sunday through Saturday
command a shell command

...

Dein Feld 6 (user) ist mir neu…

gruss
bernhard

Hallo die Damen und Herren.

Eigentlich sollte es in der ersten Zeile heissen:
30 18 * * * nw4adm stopsap nw4host

Stimmt. So kann man es auch schreiben.
War halt in der Eile etwas improvisiert…

Hi Nicos,
hab ich da was verpasst oder hält LINUX sich nicht an die
übliche Syntax für crontab:

Zum Vergleich unter SUSE 9.0

usage: crontab [-u user] file
 crontab [-u user] { -e | -l | -r }
 (default operation is replace, per 1003.2)
 -e (edit user's crontab)
 -l (list user's crontab)
 -r (delete user's crontab)

Hintergrund ist bei mir jedenfalls der, dass der betreffende Rechner den sog. SAP Web Application Server 6.40 RC1 laufen hat. Dummerweise weder mit einem Server Betriebssystem oder Serverhardware… Und bevor die Kiste im 24h*7d-Betrieb einen Knacks bekommt (=Fehler in HW oder SW) fahr’ ich den, während er nicht gebraucht wird, lieber runter. Die Liste der Fehler unter Linux ist so lang, da will ich nicht noch ein paar Böcke mehr reparieren müssen als nötig: http://www50.sap.com/linux/faq/tips_testdrive.asp

Okay, am Freitag morgen muss ich mal schauen ob meine Massnahme Erfolg gezeigt hat.
Bis denn dann.

mfg M.L.

***Werbung***
http://www.wissen-unserer-zeit.de/

hab ich da was verpasst oder hält LINUX sich nicht an die
übliche Syntax für crontab:

Auszug aus man 5 crontab auf Debian:

 The format of a cron command is very much the V7 standard,
with a number of upward-compatible extensions. Each line
has five time and date fields, followed by a command, fol­
lowed by a newline character ('0). The system crontab
(/etc/crontab) uses the same format, except that the user­
name for the command is specified after the time and date
fields and before the command. Note that if the line does
not have a trailing newline character, the entire line
will be silently ignored by both crontab and cron; the
command will never be executed.

Gruss
Schorsch

Hallo,

Ich will ein SUSE 9.0 via crontab so einstellen,

Es gibt zwei Arten von Crontabs:

  • die User-Crontabs unter /var/spool/cron/ (auch root hat so eine. Die werdem mit dem befehl „crontab -e“ als entsprechender User editiert.

  • die System-Crontab unter /etc/crontab, die nicht mir „crontab“, wohl aber als root mit dem Editor Deiner Wahl editiert wird.

Die Syntax unterscheidet sich dergestalt, als daß letztere ein zusätzliches Feld für den User enthält, unter dessen UID der Eintrag ausgeführt wird. Sowas wie:

dass es um
18:30 Uhr Systemzeit erst den Befehl ‚su - nw4adm -c „stopsap
nw4host“‘

… klingt nach einem Fall für die System Crontab.

30 18 * * * su - nw4adm -c „stopsap nw4host“

Da die PATH-Variable der Shell nicht in der crontab gilt, sollte man sie entweder dort neu setzen oder einfach nur vollständige Pfade verwenden.

Allerdings musste ich erst den cron-Prozess in YAST2 killen
damit ‚cron restart‘ Wirkung (=keine Fehlermeldung von wg.
verwendetem Prozess) gezeigt hat.

Wuss? Das halte ich für ein gerücht? Wenn man mit crontab die User Crontabs editiert, wird das Speichern und neueinlesen sogar per Syslog bemerkt …

Okay, die Frage: funktioniert das überhaupt (der Test mit der
root-Konsole verlief jedenfalls erfolgreich) und gibt es eine
noch elegantere Lösung ?

Hm.

Eleganter wäre z.B. das Beenden des SAP Server Programms als
nw4adm und das darauffolgende Herunterfahren des Systems als
ebendieser via sudo…

Ja, auch das halte ich für eine gute Idee

\* \* \* 1 \* /usr/bin/sapkill && /usr/sbin/sudo /sbin/shutdown now

oder so.

HTH,

Sebastian

Freundlich fragend M.L., der auch schon Google angestrengt hat

***Quellen***
http://www.linuxclub.de
http://www.linux-fuer-alle.de
http://www.martincordova.com/docs/suse-install.pdf

Danke - wieder was dazugelernt.

gruss
bernhard