我有一个 pptp VPN 链接拨号,从我的(debian)linux 服务器拨号到远程站点的 ISA2003 服务器。
两端的互联网连接都有些不稳定,因此我编写了一个小脚本,pon myvpnlink
当检测到链接中断时就会调用它。
如果我从 CLI 运行该脚本,它可以正常工作,但如果通过 cron 调用它,则 pon 调用似乎会失败。
我用 bash 和 perl 重写了这个脚本,但都遇到了同样的问题。脚本执行后,可以判断 VPN 链接当前是打开还是关闭,它会调用pon
pppd,然后调用 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