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

Bui*_*ots 7 linux vpn cron point-to-point-protocol

我有一个 pptp VPN 链接从我的(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
Run Code Online (Sandbox Code Playgroud)

更新:

现在工作正常。我通过 /etc/cron.d/vpn 调用我的 cron 条目,它最初看起来像:

MAILTO=root
* * * * * root /bin/bash /root/scripts/vpnup.pl >> /root/scripts/vpn.log
Run Code Online (Sandbox Code Playgroud)

现在它已被更改,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
Run Code Online (Sandbox Code Playgroud)

非常感谢贾斯汀提供示例:)

Jus*_*tin 6

您发布的错误消息有点指向 pppd 中的错误,但是您描述的“从 shell 而不是从 cron 工作”的情况通常与路径问题有关。

因为它不会受到伤害,您可以尝试将其添加到 crontab 的顶部吗?

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Run Code Online (Sandbox Code Playgroud)

编辑:您可以使用的一种解决方法是,如果它始终在 shell 中工作,请使用另一个短脚本来执行

while true;do vpnup.sh;sleep 1m;done >> log
Run Code Online (Sandbox Code Playgroud)

然后你可以在屏幕上用类似的东西开始

screen -S vpn -d -m thatscript
Run Code Online (Sandbox Code Playgroud)