ubuntuusers.de

script in crontab funktioniert nicht

Status: Gelöst | Ubuntu-Version: Ubuntu MATE 16.04 (Xenial Xerus)
Antworten |

christofj

Anmeldungsdatum:
13. Dezember 2017

Beiträge: 20

Hallo zusammen,

ich möchte mit einem script den openvpn Dienst (client Seite) neu starten wenn nach einer Zwangstrennung die Verbindung zum VPN-Server unterbrocken wurde. Das script sieht so aus:

#!/bin/sh
# Skriptname : vpnrestart 
IP=10.8.0.1

ping -c 1 $IP

while [ $? -ne 0 ]
      do
      sleep 10
      /etc/init.d/openvpn restart
      ping -c 1 $IP
      done

Wenn ich das script unter dem Benutzer root ausführe, funktioniert es. (# sh /etc/vpnrestart.sh)

Dieses script habe ich in der crontab so eingetragen:

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

* * * * * root sh /etc/vpnrestart.sh

Mit dem Befehl trail -f /var/log/syslog kann ich sehen das der cronjob jede Minute ausgeführt wird. Ausgabe:

CRON[2833]: (root) CMD (sh /etc/vpnrestart.sh)

Wenn ich jetzt eine zweite Shell starte und dort den Befehl ping 10.8.0.1 absetze steht die Verbindung. Nun trenne ich die Netzwerkverbindung (Stecker raus kurz warten Stecker rein).

Das script wird nach wie vor jede Minute ausgeführt. Allerdings wird openvpn nicht neu gestartet. Wenn ich das script von Hand starte wird openvpn neu gestartet und meine pings in der zweiten Shell kommen wieder beim VPN-Server an.

Versucht habe ich noch in der crontab den Befehl aus dem Wiki (Punkt Häufige Fehler) einzutragen, leider ohne Erfolg. einmal so:

* * * * * root /bin/bash --login /etc/vpnrestart.sh

einmal so:

* * * * * root /bin/bash --login sh /etc/vpnrestart.sh

Ich weiß mir keinen Rat mehr. Für eure Hilfe bin ich dankbar. Gruß

Bearbeitet von sebix:

Bitte verwende in Zukunft Codeblöcke, um die Übersicht im Forum zu verbessern!

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

Hallo,

da sind mehrere Sachen etwas merkwürdig - zum einen nutzt Ubuntu 16.04 systemd, du sprichst das SysV-Init-Skript aber direkt an statt den SysV-Init Kompatiblitätslayer von Systemd zu nutzen. Dann würden von Cron prinzipiell mehrere Instanzen des Skriptes gestartet werden (jede Minute eine, die dann alle einen restart auslösen und sich beenden, wenn die Verbindung wegbricht).

Wenn man das unbedingt als Skript haben will, würde ich es in eine große Schleife packen und einmalig über systemd starten lassen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/bin/sh
# Skriptname : vpnrestart 
IP=10.8.0.1

while :; do
  while ping -c 1 $IP; do
    sleep 10
  done
  systemctl restart openvpn
  sleep 60
done

Ansonsten könnte man auch einen Blick in die OpenVPN-Dokumentation werfen und es mit den Startargumenten --ping 10 --ping-restart 10 probieren.

christofj

(Themenstarter)

Anmeldungsdatum:
13. Dezember 2017

Beiträge: 20

Hallo,

danke erstmal für diesen aufgezeigten Weg. Dann werde ich mich erstmal mit systemd befassen und schauen, dass das Skript von dort startet.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13205

christofj schrieb:

Dann werde ich mich erstmal mit systemd befassen und schauen, dass das Skript von dort startet.

seahawk1986 schrieb:

Ansonsten könnte man auch einen Blick in die OpenVPN-Dokumentation werfen und es mit den Startargumenten --ping 10 --ping-restart 10 probieren.

Das hast Du aber gesehen, oder?

christofj

(Themenstarter)

Anmeldungsdatum:
13. Dezember 2017

Beiträge: 20

Ja habe ich. Danke der Nachfrage. Wenn die Verbindung unterbrochen wurde versucht sich der VPN-Client nach 5 sek mit dem Server zu verbinden das kann ich auch dem Logfile entnehmen. Nur funktioniert das nicht. Deshalb will ich das mal mit dem Skript versuchen. Spricht da aus technischer Sicht etwas dagegen? Oder ist das nur nicht sonderlich elegant? Damit kann ich dann leben.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11260

Wohnort: München

christofj schrieb:

Wenn die Verbindung unterbrochen wurde versucht sich der VPN-Client nach 5 sek mit dem Server zu verbinden das kann ich auch dem Logfile entnehmen. Nur funktioniert das nicht.

Geht nicht ist ja immer nur der Anfang der Fehlersuche - woran scheitert die erneute Verbindung? Kann der Hostname nicht aufgelöst werden, ändert sich die IP des Gegenübers, dauert die Unterbrechung der Internetverbindung zu lange, so dass der Client aufgibt?

christofj

(Themenstarter)

Anmeldungsdatum:
13. Dezember 2017

Beiträge: 20

Ja, die Unterbrechung der Internetverbindung ist der Grund das der Client aufgibt.

Nun habe ich als Internetverbindung nur einen UMTS-Stick der an einem Raspberry PI angesteckt ist.

Was mir wichtig ist, ist das die Verbindung auf jeden Fall wieder hergestellt wird. Ob das nach 10 oder 15 Minuten passiert ist mir nicht wichtig. Testweise ist es die eine Minute da ich das Skript ursprünglich als Cronjob anlegen wollte. Später ist eine Prüfung der Verbindung alle 10 Minuten vollkommen ausreichend.

christofj

(Themenstarter)

Anmeldungsdatum:
13. Dezember 2017

Beiträge: 20

Hallo zusammen,

ich habe das Skript über systemd aktivier und es funktioniert. Ein weiteren Grund das die VPN Verbindung nicht mehr hergestellt werden konnte war die prepaid-Karte von Congstar. Da kann man einen Datentarif über 25 MB für 0,99€ buchen, nur nach 24h ist dann schluss egal ob verbraucht oder nicht.

Danke nochmal an euch.

Antworten |