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