PPTP 无法通过 cron 命令连接

PPTP 无法通过 cron 命令连接

我正在尝试弄清楚为什么当命令从 cron 触发脚本启动时我的 VPN 无法连接,而相同的脚本和命令却按预期工作。

我有一台远程服务器,它使用安全 VPN 隧道 (pptp) 连接到防火墙后面的数据库。这是一个相当稳定的系统(尤其是persistent设置了选项的情况下),并且通常运行没有任何问题。但是,从我们的 ISP 到我们办公室的连接有时会断开,并且这种断开时间足以阻止 VPN 隧道保持打开状态。

我已经建立了一个简单的脚本来检测防火墙数据库是否仍然可通过 VPN 访问,如果不可用,它会尝试重新打开 VPN。

#!/bin/bash

DATE=`date`

HOST=10.1.2.1

PING_RESULT=`ping -c4 $HOST`
# gets the percentage of lost packets
PING_LOSS=`echo $PING_RESULT : | grep -oP '\d+(?=% packet loss)'`

echo "$DATE : Loss Result : $PING_LOSS"

# if 100% packet loss on the ping - assume connection lost
if [ "100" -eq "$PING_LOSS" ];
then
        echo "$DATE : Connection Lost"
        pon VPN_TUNNEL
        echo "$DATE : Restarted Connection"
else
        echo "$DATE : Connection OK"
fi

我已将脚本保存为/root/cron/pptp-monitor并将权限设置为-rwxr--r-- root root

该脚本在手动运行(使用 sudo)时运行良好 - 但我配置的 cron 无法正常工作:

*/5 *     * * *     root   [ -x /root/cron/pptp-monitor ] && /root/cron/pptp-monitor >> /var/log/pptp-monitor.log 2>&1

监视脚本运行 - 我每 5 分钟查看一次日志条目 - 但pon命令实际上似乎并没有触发。

在系统日志中,我每 5 分钟会看到一次这样的情况:

Apr 17 08:45:01 bombur CRON[774]: (root) CMD (  [ -x /root/cron/pptp-monitor ] && /root/cron/pptp-monitor >> /var/log/pptp-monitor.log 2>&1)
Apr 17 08:45:14 bombur pppd[784]: pppd 2.4.5 started by root, uid 0
Apr 17 08:45:14 bombur pppd[784]: Using interface ppp0
Apr 17 08:45:14 bombur pppd[784]: Connect: ppp0 <--> /dev/pts/0
Apr 17 08:45:14 bombur pppd[784]: Modem hangup
Apr 17 08:45:14 bombur pppd[784]: Connection terminated.

之前重复了 10 次“使用接口 ppp0”到“连接终止”这几行exit- 表明隧道正在尝试重新打开,但没有成功。注意 - 此时网络连接正常,只要我手动运行命令,它就会在第一次尝试时连接。

我错过了什么导致 cron 触发器阻止 VPN 连接?

答案1

您需要PATH在脚本中声明变量,之后它才会起作用。在文件顶部(以及crontab将要执行的脚本):

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

答案2

我更喜欢运行这个:

# Here we can specify which user do crontab use.
# And, we can change $PATH by edit this file directly

vi /etc/crontab

# I'm using centos, restart cron daemon

service crond restart

然后运行这个:

# Edit crontab directly, we can't specify the user.
# And I'm not sure changing $PATH is available or not.
# The default value of $PATH may be `/sbin:/bin:/usr/sbin:/usr/bin'

crontab -e

因为 pppd 将运行 pptp,但是 pptp 位于 `/usr/sbin/',所以设置 $PATH 是必要的。

相关内容