PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : cron führt Script nicht richtig aus



dreamer_dani
24.10.14, 18:33
Hi Leute,

habe bereits alles mögliche versucht, damit CRON mein Skript ausführt, aber es will einfach nicht


#!/bin/bash

SHELL="/bin/bash"
NSLOOKUP="/usr/bin/nslookup"
CAT="/bin/cat"
GREP="/bin/grep"
CUT="/usr/bin/cut"
ECHO="/bin/echo"
SERVICE="/usr/sbin/service"
SLEEP="/bin/sleep"
DEV_NULL="/dev/null"


#Script zum automatischen Neuaufbau der VPN Verbindung

$SHELL /etc/openvpn/off_forwardVPN.sh

#$SERVICE openvpn restart 2> $DEV_NULL
/etc/init.d/openvpn restart

$SLEEP 1

$SHELL /etc/openvpn/forward_gw_on.sh


Meine Crontab hat folgenden Eintrag


# m h dom mon dow command
0 3 * * * ntpdate -u ntp.ubuntu.com
*/1 * * * * /bin/bash /etc/openvpn/checkIP.sh


Ich habe bereits die absoluten Pfade angegeben, habe nur Tabs in der crontab benutzt.
Wenn ich das Skript in der BASH ausführe geht es hervorragend, openVPN wird zuverlässig neu gestartet.

In der syslog hingegen kommt folgendes:
Oct 24 17:55:01 banananbg /USR/SBIN/CRON[17100]: (root) CMD (/bin/sh /etc/openvpn/checkIP.sh)
Oct 24 17:55:03 banananbg /USR/SBIN/CRON[17099]: (CRON) info (No MTA installed, discarding output)





Weis nicht so recht was das bedeuten soll? Komme hier einfach nicht weiter.

Danke schon mal, vielleicht weis einer was dazu wie man mit cron Prozesse / Services neu starten kann?

Gruß dreamer_dani

marce
24.10.14, 19:24
Der Logeintrag heißt einfach, daß Cron Dein Script ausgeführt hat.

Was tut denn nicht - ohne es mir genauer angesehen zu haben...?

dreamer_dani
24.10.14, 20:07
Hi,

Sorry habe mich da wirklich ganz vergessen zu sagen was eigentlich nicht läuft. Das openvpn wird nicht neu gestartet, ich kann es mir aber nicht erklären woran es liegt.
Das Skript wird aufgerufen, das stimmt. Aber bei der Abarbeitung gibt es unterschiede wenn ich es manuell starte und wenn ich es von cron starten lasse.

Habe es mit


service openvpn restart

als auch


/etc/init.d/openvpn restart

probiert.

Ich habe ein Skript das überprüft, ob die VPN gegenstelle noch erreichbar ist und falls nicht wird das Skript oben gestartet.

Danke

marce
24.10.14, 20:10
will Dein OpenVPN beim resstart zufällig ein Passwort haben?

Läuft das Script "aus der Konsole heraus" fehlerfrei?

Gibt's Logausgaben des Scriptes? Im schlimmsten Fall halt einbauen...

dreamer_dani
24.10.14, 20:22
will Dein OpenVPN beim resstart zufällig ein Passwort haben?

Läuft das Script "aus der Konsole heraus" fehlerfrei?

Gibt's Logausgaben des Scriptes? Im schlimmsten Fall halt einbauen...

Ja, es läuft aus der Konsole heraus fehlerfrei. Ich kann es mir auch nicht mehr erklären, habe mir schon log-Ausgaben mit eingebaut, es läuft immer bis zum Restart-Aufruf, dieser wird nicht ausgeführt und deshalb bringt der darauf folgende Befehl der den Standard-GW ändert den Fehler, das es kein Device tun0 gibt?

Habe auch schon mit einem Sleep nach dem restart gearbeitet, bis zu 10 Sekunden sogar -> kein Unterschied.

Deshalb frage ich mich, ob man mit CRON überhaupt einen Deamon neu starten kann??

marce
24.10.14, 20:31
Klar geht das.

Lass Dir den openvpn-Aufruf doch mal rausdebuggen (im schlimmesten Fall mit strace) - oder poste das Script hier.

dreamer_dani
24.10.14, 20:44
So habe mal stdin und stderr in eine Datei umgeleitet und da wird tatsächlich ein Fehler ausgegeben?


root@banananbg:/etc/openvpn# cat serviceErr.log
Stopping virtual private network daemon:.
Starting virtual private network daemon: tun0/etc/init.d/openvpn: 84: /etc/init.d/openvpn: start-stop-daemon: not found
failed!
root@banananbg:/etc/openvpn#
root@banananbg:/etc/openvpn# sh autoRestart.sh
[ ok ] Stopping virtual private network daemon:.
[ ok banananbg:/etc/openvpn# [....] Starting virtual private network daemon: tun0.

root@banananbg:/etc/openvpn#



So sieht das Skript aktuell aus welches das Problem verursacht. Ich rufe das Skript immer mit "/bin/bash skriptname.sh" auf


#!/bin/bash

SHELL="/bin/bash"
NSLOOKUP="/usr/bin/nslookup"
CAT="/bin/cat"
GREP="/bin/grep"
CUT="/usr/bin/cut"
ECHO="/bin/echo"
AWK="/usr/bin/awk"
IP="/sbin/ip"
DATE="/bin/date"
TRACEROUTE="/usr/sbin/traceroute"
SERVICE="/usr/sbin/service"
SLEEP="/bin/sleep"
DEV_NULL="/dev/null"


#Script zum automatischen Neuaufbau der VPN Verbindung

$SHELL /etc/openvpn/off_forwardVPN.sh

#$SERVICE openvpn restart 2> $DEV_NULL
/etc/init.d/openvpn restart &> /etc/openvpn/serviceErr.log

$SLEEP 1

$SHELL /etc/openvpn/forward_gw_on.sh



Merkwürdig ist eben, das ein aufruf aus der Konsole von Hand auf Anhieb funktioniert???

dreamer_dani
24.10.14, 21:04
Hi Leute, Dank dem Tipp mir mal die Ausgabe von "service openvpn restart" ausgeben zu lassen konnte ich mir jetzt selbst die Lösung liefern.

Habe am Anfang des Skriptes die PATH Variable geladen


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


Und schon verhält sich CRON wie meine BASH :D

Danke für die Hilfe!!!


PS: Gibt es eine Möglichkeit das Thema auf gelöst zu setzen?

THX