1

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

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

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

4 回答 4

1

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

我找到的唯一解决方案是运行:

crontab -e

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

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
于 2016-04-29T04:53:10.257 回答
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

UNIX shell 脚本中的“#!/bin/sh”行是什么意思?

于 2013-07-25T20:52:59.177 回答
0

我修好了它。所有这一切都是在我运行时,crontab -e 但要添加用户名,需要将其添加到在下面找到的系统范围的 cron 文件中/etc/crontab

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

于 2013-07-26T17:25:53.383 回答
0

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

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

替换您自己的外壳名称。

于 2018-05-25T06:27:24.887 回答