pptp (pon) завершается ошибкой при вызове через cron (debian)

У меня есть VPN-соединение pptp с моего (debian) сервера Linux здесь, на сервер ISA2003 на удаленном сайте.

Подключение к Интернету на обоих концах несколько сложное, поэтому я написал небольшой скрипт для вызова pon myvpnlink если он обнаружит, что ссылка отключилась.

Этот сценарий работает нормально, если я запускаю его из CLI, но если он вызывается через cron, то вызов pon кажется неудачным.

Я переписал это как на bash, так и на perl, и у меня та же проблема с каждым. Сценарий выполняется, он может сказать, работает ли VPN-канал в данный момент или нет, он вызывает pon который вызывает pppd, который не может подключиться. Если я тогда пойду выполнить скрипт из CLI, это нормально.

Любые мысли будут очень цениться - это делает мой ящик в настоящее время.

#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

Обновить:

Работает нормально сейчас. Я звонил в мою запись cron через /etc/cron.d/vpn, которая изначально выглядела так:

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

Теперь, когда его изменили, pptp работает отлично:-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

большое спасибо Джастину за примеры:)

2 ответа

Решение

Сообщение об ошибке, которое вы опубликовали, указывает на ошибку в pppd, однако описанная вами ситуация "работает из оболочки, но не из cron" обычно связана с проблемами пути.

так как это не может повредить, вы можете попробовать добавить это в начало вашего crontab?

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

edit: один обходной путь, который вы можете использовать, если он всегда работает из оболочки, есть другой короткий скрипт, который делает

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

тогда вы можете просто начать это на экране с чем-то вроде

screen -S vpn -d -m thatscript

Спасибо, это сработало для меня! Мой конфиг теперь выглядит так...

#!/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

И мой крон...

# 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
Другие вопросы по тегам