Назад | Перейти на главную страницу

pptp (pon) не работает при вызове через cron (debian)

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

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

Этот сценарий отлично работает, если я запускаю его из интерфейса командной строки, но если он вызывается через 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

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

Сообщение об ошибке, которое вы опубликовали, указывает на ошибку в 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

А моя 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