Вопрос PPTP не будет подключаться из команды cron


Я пытаюсь понять, почему моя VPN не будет подключаться, когда команда запускается из сценария запуска cron, когда тот же скрипт и команда работают иначе, как ожидалось.

У меня есть удаленный сервер, который использует безопасный VPN-туннель (pptp) для подключения к базе данных позади нашего брандмауэра. Это довольно стабильная система (особенно с persistent набор опций) и, как правило, без проблем. Тем не менее, время от времени происходит отключение нашего интернет-провайдера до нашего офиса, и это разъединение достаточно долго, чтобы туннель VPN оставался открытым.

Я установил простой скрипт, чтобы определить, доступна ли брандмауэрная база данных по VPN, а если нет, он пытается открыть 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

Я сохранил сценарий как /root/cron/pptp-monitor и установите разрешения как -rwxr--r-- root root

Сценарий отлично работает при запуске вручную (с использованием sudo), но сконфигурированный cron не работает должным образом:

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

Сценарий монитора запускается - я вижу записи журнала каждые 5 минут, но pon команда на самом деле не срабатывает.

В syslog я вижу это каждые 5 минут:

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.

Строки «использование интерфейса ppp0» для «соединения завершены» повторяются 10 раз до exit - указывает, что туннель пытается неудачно возобновить работу. Примечание. В это время сетевое подключение будет прекрасным, и как только я запустим команду вручную, она подключится с первой попытки.

Что я пропустил, что приводит к тому, что триггер cron предотвращает соединение VPN?


2
2018-04-16 23:40


происхождения


вы нашли какое-нибудь решение? - MKT
@MKT пока нет - HorusKol


ответы:


Вам необходимо объявить PATH переменная в ваших скриптах, после чего она будет работать. В верхней части файлов (оба crontab и скрипт, который будет выполнен):

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

2
2018-01-26 12:09



Почему нет #!/bin/sh? - Donarsson


Я бы предпочел запустить это:

# 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

Затем выполните следующие действия:

# 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

Поскольку pppd запускает pptp, но pptp находится в `/ usr / sbin / ', поэтому может потребоваться установить $ PATH.


0
2018-02-02 05:01



Извините, но это просто неправильно. Нет причин для использования /etc/crontab, При запуске contab -e, вы находятся редактируя файл напрямую, это всего лишь персональный crontab вашего пользователя, поэтому предполагается, что имя пользователя. Если вы хотите сделать это для другого пользователя, запустите sudo -u username crontab -e, Что касается $PATH, нет никакой разницы между использованием общесистемного /etc/crontab файл или локальный. - terdon♦