web-dev-qa-db-fra.com

PPTP ne se connectera pas à partir d'une commande cron

J'essaie de comprendre pourquoi mon VPN ne se connectera pas lorsque la commande est lancée à partir d'un script déclenché par cron alors que le même script et la même commande fonctionnent comme prévu.

J'ai un serveur distant qui utilise un tunnel VPN sécurisé (pptp) pour se connecter à une base de données derrière notre pare-feu. C'est un système assez stable (en particulier avec le jeu d'options persistent), et fonctionne généralement sans aucun problème. Cependant, de temps en temps, la connexion de notre FAI à notre bureau est interrompue, et cette déconnexion est suffisamment longue pour empêcher le tunnel VPN de rester ouvert.

J'ai mis en place un script simple pour détecter si la base de données pare-feu est toujours disponible sur le VPN et, sinon, il tente de rouvrir le VPN.

#!/bin/bash

DATE=`date`

Host=10.1.2.1

PING_RESULT=`ping -c4 $Host`
# gets the percentage of lost packets
PING_LOSS=`echo $PING_RESULT : | grep -oP '\d+(?=% packet loss)'`

echo "$DATE : Loss Result : $PING_LOSS"

# if 100% packet loss on the ping - assume connection lost
if [ "100" -eq "$PING_LOSS" ];
then
        echo "$DATE : Connection Lost"
        pon VPN_TUNNEL
        echo "$DATE : Restarted Connection"
else
        echo "$DATE : Connection OK"
fi

J'ai enregistré le script sous /root/cron/pptp-monitor et définissez les autorisations sur -rwxr--r-- root root

Le script fonctionne très bien lorsqu'il est exécuté manuellement (à l'aide de Sudo) - mais le cron que j'ai configuré ne fonctionne pas correctement:

*/5 *     * * *     root   [ -x /root/cron/pptp-monitor ] && /root/cron/pptp-monitor >> /var/log/pptp-monitor.log 2>&1

Le script de contrôle s'exécute - je vois les entrées du journal toutes les 5 minutes - mais la commande pon ne semble pas réellement se déclencher.

Dans le syslog, je vois cela toutes les 5 minutes:

Apr 17 08:45:01 bombur CRON[774]: (root) CMD (  [ -x /root/cron/pptp-monitor ] && /root/cron/pptp-monitor >> /var/log/pptp-monitor.log 2>&1)
Apr 17 08:45:14 bombur pppd[784]: pppd 2.4.5 started by root, uid 0
Apr 17 08:45:14 bombur pppd[784]: Using interface ppp0
Apr 17 08:45:14 bombur pppd[784]: Connect: ppp0 <--> /dev/pts/0
Apr 17 08:45:14 bombur pppd[784]: Modem hangup
Apr 17 08:45:14 bombur pppd[784]: Connection terminated.

Les lignes "using interface ppp0" to "connection terminated" sont répétées 10 fois avant exit - indiquant que le tunnel tente de rouvrir sans succès. Remarque - la connexion réseau est très bien à ce moment, et dès que j'exécute la commande manuellement, elle se connecte à la première tentative.

Qu'est-ce que j'ai raté qui fait que le déclencheur cron empêche la connexion VPN?

2
HorusKol

Vous devez déclarer la variable PATH dans vos scripts, ensuite cela fonctionnera. En haut des fichiers (le crontab et le script qui va être exécuté):

Shell=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
2
Matei

Je préfère exécuter ceci:

# Here we can specify which user do crontab use.
# And, we can change $PATH by edit this file directly

vi /etc/crontab

# I'm using centos, restart cron daemon

service crond restart

Ensuite, exécutez ceci:

# Edit crontab directly, we can't specify the user.
# And I'm not sure changing $PATH is available or not.
# The default value of $PATH may be `/sbin:/bin:/usr/sbin:/usr/bin'

crontab -e

Parce que pppd exécutera pptp, mais que pptp se trouvait dans `/ usr/sbin/', donc $ PATH peut être nécessaire.

0
0xAA55