【问题标题】:Cronjob not running bash scriptCronjob 没有运行 bash 脚本
【发布时间】:2015-02-16 04:16:01
【问题描述】:

我写了一个小脚本来检查openvpn是否正在运行,如果没有就启动它。

这是我正在运行的脚本

#!/bin/bash **-x**

ps auxw | grep openvpn | grep -v grep > /dev/null

if [ $? != 0 ]
then
    /etc/init.d/openvpn start > /dev/null
    log="/root/ServerRestart.log"
    echo "The Openvpn Server was restarted at\n" > $log
    date  >> $log
fi

这里是 crontab:

* * * * * /root/vpnmonitor.sh

它在 syslog 中显示它运行脚本但它似乎并没有实际执行,从终端运行时脚本工作正常。

【问题讨论】:

  • 您可能会发现通过stackoverflow.com/tags/crontab/info 中的“调试 crontab”很有用很多问题都在那里得到了很好的描述。
  • **-x** 在你的 shebang 中是什么意思?
  • 这显然使错误更加冗长
  • 很少有建议:对于数字比较,您不应该使用 -ne (例如 [ $? -ne 0 ] )而不是 != 。还要确保您对脚本具有执行权限。至少在两次执行脚本之间保持一些时间间隔..我看到所有 *
  • 首先,$?来自管道中的最后一个 grep 语句。所以,我不明白为什么你的代码是正确的。 pgrep 存在于许多 UNIX 变体中,包括 ubuntu。用pgrep openvpn替换管道,或者你喜欢管道,使用${PIPESTATUS[*]}数组。我认为您的代码每次运行时都会重新启动 openvpn。当 ti 实际运行时 - @fedorqui 很可能是几个问题中的第一个。

标签: linux bash unix ubuntu cron


【解决方案1】:

openvpn 服务不会在没有正确路径的情况下启动。 尝试包含在您的“vpnmonitor.sh”中:

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

喜欢:

#!/bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

logger "VPN restarted from cron"

/etc/init.d/openvpn restart vpn-servername

【讨论】:

    【解决方案2】:

    我在 /etc/crontab 中创建了一个新的 cronjob,而不是使用 crontab -e,现在它可以工作了,谢谢大家。

    【讨论】:

      猜你喜欢
      • 2018-04-09
      • 1970-01-01
      • 2019-08-16
      • 2022-06-15
      • 1970-01-01
      • 2012-04-12
      • 2018-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多