pptp(pon)通过 cron(debian)调用时失败

pptp(pon)通过 cron(debian)调用时失败

我有一个 pptp VPN 链接拨号,从我的(debian)linux 服务器拨号到远程站点的 ISA2003 服务器。

两端的互联网连接都有些不稳定,因此我编写了一个小脚本,pon myvpnlink当检测到链接中断时就会调用它。

如果我从 CLI 运行该脚本,它可以正常工作,但如果通过 cron 调用它,则 pon 调用似乎会失败。

我用 bash 和 perl 重写了这个脚本,但都遇到了同样的问题。脚本执行后,可以判断 VPN 链接当前是打开还是关闭,它会调用ponpppd,然后调用 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

更新:

现在运行良好。我通过 /etc/cron.d/vpn 调用我的 cron 条目,它最初看起来像:

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

非常感谢贾斯汀给出的例子:)

答案1

您发布的错误消息指向 pppd 中的一个错误,但是您描述的“从 shell 中有效但从 cron 中无效”的情况是通常与路径问题相关。

既然它不会造成伤害,您可以尝试将其添加到您的 crontab 的顶部吗?

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

编辑:您可以使用的一个解决方法是,如果它总是从 shell 工作,那么使用另一个简短的脚本来执行

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

然后你就可以在屏幕上用类似以下命令启动它

screen -S vpn -d -m thatscript

答案2

谢谢,这对我有用!我的配置现在看起来像这样...

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

相关内容