pptp (pon) schlägt fehl, wenn es über cron (debian) aufgerufen wird.

7

Ich habe eine pptp-VPN-Verbindung, die von meinem (Debian-) Linux-Server hier zu einem ISA2003-Server an einem Remote-Standort wählt.

Die Internetverbindung an (beiden) Enden ist etwas zwielichtig, daher habe ich ein kleines Skript geschrieben, das aufgerufen werden soll, pon myvpnlinkwenn festgestellt wird, dass die Verbindung unterbrochen wurde.

Dieses Skript funktioniert einwandfrei, wenn ich es über die CLI ausführe. Wenn es jedoch über cron aufgerufen wird, scheint der pon-Aufruf fehlzuschlagen.

Ich habe dies sowohl in Bash als auch in Perl neu geschrieben und habe mit jedem das gleiche Problem. Das Skript wird ausgeführt, es kann erkennen, ob die VPN-Verbindung gerade aktiv oder poninaktiv ist, es ruft auf, welche Aufrufe pppd aufrufen, welche Verbindung nicht hergestellt werden kann. Wenn ich dann gehe und das Skript von der CLI ausführe, ist es in Ordnung.

Alle Gedanken wären sehr dankbar - das macht meine Box jetzt rein.

#Syslog (on a failure):
Dec 30 17:02:01 LogServer /USR/SBIN/CRON[4530]: (root) CMD (/bin/bash /root/scripts/vpnup.bash >> /root/scripts/vpn.log)
Dec 30 17:02:01 LogServer pppd[4542]: pppd 2.4.4 started by root, uid 0
Dec 30 17:02:01 LogServer pppd[4542]: Couldn't get channel number: Input/output error
Dec 30 17:02:01 LogServer pppd[4542]: Exit.

#Cron Line
* * * * * root /bin/bash /root/scripts/vpnup.bash >> /root/scripts/vpn.log

Aktualisieren:

Funktioniert jetzt gut. Ich habe meinen Cron-Eintrag über /etc/cron.d/vpn aufgerufen, was ursprünglich so aussah:

MAILTO=root
* * * * * root /bin/bash /root/scripts/vpnup.pl >> /root/scripts/vpn.log

Jetzt, da es geändert wurde, funktioniert pptp perfekt :-D

MAILTO=root
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * * root perl /root/scripts/vpnup.pl >> /root/scripts/vpn.log

Vielen Dank an Justin für die Beispiele :)

BuildTheRobots
quelle

Antworten:

5

Die Fehlermeldung, die Sie gepostet haben, weist auf einen Fehler in pppd hin. Die von Ihnen beschriebene Situation "funktioniert von der Shell, aber nicht von cron" hängt normalerweise mit Pfadproblemen zusammen .

Können Sie versuchen, dies oben auf Ihrem Crontab hinzuzufügen, da es nicht schaden kann?

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

Bearbeiten: Eine Problemumgehung, die Sie verwenden können, ist, wenn es immer über die Shell funktioniert, ein anderes kurzes Skript zu haben, das a ausführt

while true;do vpnup.sh;sleep 1m;done >> log

dann können Sie das einfach auf dem Bildschirm mit so etwas beginnen

screen -S vpn -d -m thatscript
Justin
quelle
1
Danke für die Antwort. Ich werde versuchen, dem Cron-Eintrag für mein Skript Pfadanweisungen hinzuzufügen, um festzustellen, ob Änderungen vorgenommen wurden. Die Idee, eine Schleife zu erstellen, ist eine gute Problemumgehung, obwohl ich versucht habe, sie zu vermeiden, falls mein Skript abstürzt oder was auch immer. Ich finde es gut, dass Sie mein Skript von einem anderen Skript aus aufgerufen haben, was die Ausfallsicherheit erhöhen sollte. Ich habe mich gefragt, ob ich meinen eigenen Daemon erstellen soll (der über init ausgeführt werden soll), der das VPN überwacht, oder wäre das einfach übertrieben?
BuildTheRobots
1
Ja, die Pfadanweisung hilft (und das Aufrufen über Bash und Perl hilft wahrscheinlich auch) - danke :-D
BuildTheRobots
Cool :-) Ein Daemon ist wahrscheinlich übertrieben, solange Cron funktioniert. Ich neige dazu, Daemontools zu verwenden oder für Dinge, die rund um die Uhr ausgeführt werden müssen oder die beispielsweise in Intervallen von 10 Minuten ausgeführt werden müssen, deren Ausführung jedoch regelmäßig länger als 10 Minuten dauern kann.
Justin
2

Danke, das hat bei mir funktioniert! Meine Konfiguration sieht jetzt so aus ...

#!/bin/bash
result=`ifconfig | grep ppp0 | wc -l`
if [[ $result  != "1" ]]; then
pon hma
sleep 10
route add -net 0.0.0.0 ppp0 #Routes all traffic on the server through VPN (useful)
fi

Und mein Cron ...

# m h  dom mon dow   command
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * * /home/foo/restart_vpn.sh
Chris
quelle