【发布时间】:2014-01-02 03:35:50
【问题描述】:
我有一个脚本检查PPTP VPN 是否正在运行,如果没有,它会重新连接 PPTP VPN。当我手动运行脚本时,它执行得很好,但是当我做一个 cron 作业时,它没有运行。
* * * * * /bin/bash /var/scripts/vpn-check.sh
这是脚本:
#!/bin/sh
/bin/ping -c3 192.168.17.27 > /tmp/pingreport
result=`grep "0 received" /tmp/pingreport`
truncresult="`echo "$result" | sed 's/^\(.................................\).*$$'`"
if [[ $truncresult == "3 packets transmitted, 0 received" ]]; then
/usr/sbin/pppd call home
fi
【问题讨论】:
-
这个
sed声明永远不会起作用。整个解决方案看起来很脆弱。为此使用if-up.d脚本 -
12 月 14 日 12:41:01 server3 CRON[5381]: (root) CMD (/bin/bash /var/scripts/vpn-check.sh )
-
@hek2mgl,为什么?无论如何,sed 应该有完整的路径,就像其他任何东西一样。
-
cron 作业无法运行的常见原因是权限和路径。请阅读
cronman 条目几次,并尝试了解路径如何中断以及 cron 作业将在哪些权限下运行。 -
@user3101956 因为 sed 中的替换命令看起来像
s/PATTERN/REPLACEMENT/而你的只是s/PATTERN