从cron启动pppd不起作用

时间:2013-07-25 13:28:01

标签: linux ubuntu vpn pppd

我想在断开连接时启动pppd。我正在尝试设置一个shell脚本,每1分钟运行一次,看它是否已经关闭并重新连接。

我有一个名为vpn-check.sh的bash脚本:

ping -c3 10.8.3.0 > pingreport
result=`grep "0 received" pingreport`
truncresult="`echo "$result" | sed 's/^\(.................................\).*$/\1/'`"
if [[ $truncresult == "3 packets transmitted, 0 received" ]]; then
  pon VPNname
fi

当我直接从cli运行这个脚本时,它会工作并启动ppp但是当我通过cronjob(对于root用户)运行它时,它不起作用。

我尝试了以下但没有工作

*/1 * * * * bash /root/vpn-check.sh > /root/cronlog.txt 2>&1

我尝试了以下但没有工作

*/1 * * * * /root/vpn-check.sh > /root/cronlog.txt 2>&1

最后,我试过了:

*/1 * * * * /usr/sbin/pppd call VPNname> /root/cronlog.txt 2>&1

无法弄清楚可能出现的问题。

4 个答案:

答案 0 :(得分:1)

我仍然不明白为什么有些脚本在根据日志被调用为正确用户时无法使用cron。

我发现的唯一解决方案是运行:

crontab -e

并将以下行添加到顶部(即使我通过完整路径调用pppd守护程序):

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

答案 1 :(得分:0)

你错过了shell脚本中的shebang。

vpn-check.sh 应如下所示:

#!/bin/bash
ping -c3 10.8.3.0 > pingreport
result=`grep "0 received" pingreport`
truncresult="`echo "$result" | sed 's/^\(.................................\).*$/\1/'`"
if [[ $truncresult == "3 packets transmitted, 0 received" ]]; then
pon VPNname
fi

请参阅:

http://linuxconfig.org/bash-scripting-tutorial

What does the line "#!/bin/sh" mean in a UNIX shell script?

答案 2 :(得分:0)

我修好了。我跑步的所有这一切crontab -e 但是对于要添加的用户名,需要将其添加到/etc/crontab

下的系统范围的cron文件中

启动作业的用户只能添加到上述系统范围的cron文件中。

答案 3 :(得分:0)

我也遇到了同样的问题。我用@dave's answer来解决这个问题。您只需要将用户名添加到crontab,将下一行添加到/ etc / crontab文件的末尾:

*/1 * * * * root bash /root/vpn.sh

替换您自己的shell名称。