einzelner Befehl innerhalb eines Script wird nicht ausgeführt, wenn es per cron gestartet wird - in einer bash funktioniert es aber
Hallo,
ich übersehe wahrscheinlich etwas und brauche daher mal Eure Mithilfe
für meinen begrenzten Horizont.
Auf einem Bananapi mit ARMBIAN Debian GNU/Linux 8 (jessie) 4.8.4-sunxi
möchte ich per cron einen Dienst (prosody 0.9.10-1~jessie1
armhf Lightweight Jabber/XMPP server) überwachen.
Dazu habe ich per crontab -e (per root) folgende Zeile eingefügt:
* * * * * /usr/local/sbin/dienstueberwachung_lua_5_1_chat (wird noch
auf */5 * * * * geändert, falls es mal funktioniert)
Die Rechte sind folgende:
-rwxr-xr-x 1 root root 768 Okt 28 00:01
/usr/local/sbin/dienstueberwachung_lua_5_1_chat
Listing von dienstueberwachung_lua_5_1_chat:
#!/bin/sh
PROZ=prosody
APP=$(ps aux | grep -v grep | grep prosody)
if [ -n "$APP" ]
then
echo "$APP"
echo "[$(date +"%Y-%m-%d %H:%M")] lua laeuft"
echo "[$(date +"%Y-%m-%d %H:%M")] lua laeuft" >>
/var/log/lua-watchdog.log
echo "lua ist aktiv"
else
echo "prosody wird gestartet"
echo "[$(date +"%Y-%m-%d %H:%M")] lua wurde neu gestartet"
echo "[$(date +"%Y-%m-%d %H:%M")] lua wurde neu gestartet" >>
/var/log/lua-watchdog.log
cd /usr/sbin/
/usr/bin/logger "cd /usr/sbin/ ausgefuehrt: $(/bin/date)"
service prosody start
/usr/bin/logger "ausgefuehrt: $(/bin/date)"
fi
service cron restart ist erfolgt und meine eingebauten Überprüfungen
funktionieren auch. Leider wird der prosody Dienst nur neu gestartet,
wenn ich das script in einer bash starte, siehe folgendes Beispiel:
# /usr/local/sbin/dienstueberwachung_lua_5_1_chat
prosody wird gestartet
[2016-10-28 13:24] prosody wurde neu gestartet
Starting Prosody XMPP Server: prosody.
...
bei nochmaligen start erscheint richtigerweise:
# /usr/local/sbin/dienstueberwachung_lua_5_1_chat
prosody 25340 1.3 0.6 8364 6248 ? S 13:24 0:00
/usr/bin/lua5.1 /usr/bin/prosody
[2016-10-28 13:24] prosody laeuft
prosody ist aktiv
manuelle Kontrolle:
# /bin/ps ax | /bin/grep 'prosody' | /bin/grep -v '/bin/grep'
25340 ? S 0:01 /usr/bin/lua5.1 /usr/bin/prosody
Beende ich manuell prosody und schaue mir dann das Log an,
welches durch den laufenden cron Job erzeugt wird:
# tail -f /var/log/lua-watchdog.log
[2016-10-28 14:06] lua wurde neu gestartet
[2016-10-28 14:07] lua wurde neu gestartet
[2016-10-28 14:07] lua wurde neu gestartet
(zwischendurch manueller Aufruf des Scriptes
/usr/local/sbin/dienstueberwachung_lua_5_1_chat)
[2016-10-28 14:08] lua laeuft
[2016-10-28 14:09] lua laeuft
scheint auch die if then else Schleife zu funktionieren.
Nur, er startet den Dienst nicht :-(
Hier noch ein Logfile, dass den Lauf des cron jobs anzeigt:
# cat /var/log/syslog |grep 14\:06
Oct 28 14:06:01 localhost CRON[26141]: (root) CMD
(/usr/local/sbin/dienstueberwachung_lua_5_1_chat)
Oct 28 14:06:01 localhost logger: cd /usr/sbin/ ausgefuehrt: Fr 28. Okt
14:06:01 CEST 2016
Oct 28 14:06:01 localhost logger: ausgefuehrt: Fr 28. Okt 14:06:01 CEST 2016
Oct 28 14:06:01 localhost CRON[26137]: (CRON) info (No MTA installed,
discarding output)
Mit dem fehlenden MTA kann's doch nicht zusammenhängen?...
/etc/init.d/prosody start habe ich als Ersatz für service prosody start
auch schon getestet, da brachte aber keine Veränderung.
Ich hoffe auf einen hilfreichen Hinweis ;-)
Falls ich wichtige Fakten vergessen habe, bitte kurz darauf hinweisen...
Grüße Heiko
Reply to: