运行在cron上的bash脚本失败了一些命令

时间:2013-12-02 07:13:01

标签: bash shell cron status

我有一个简单的bash脚本来监控服务的状态。

脚本控制

  • 如果正在运行
  • 如果没有运行,请执行init脚本服务启动并获取一些日志行,写下日志时刻并发送带有结果的电子邮件。

当脚本在cron作业上运行时,除init脚本以外的所有工作fin启动服务。 如果手动执行,则此脚本可以正常工作。

#!/bin/bash
estado=$(/etc/init.d/open-xchange status)
echo $estado

if [ "$estado" != "Checking for Open-Xchange: running." ]; then
    hora=$(date +%F-%T)
    tail -n 1000  /var/log/open-xchange/open-xchange.log.0 > /tmp/open-xchange.log.$hora
    cat /tmp/open-xchange.log.$hora |mail -s "Reinicio en OX $hora" xxxxxx@gmail.com
    rm -f /tmp/open-xchange.log.$hora
    echo $hora >> /root/caidas-ox.txt
    /etc/init.d/open-xchange start   # The problem. This command not work when scripts its executed form crond
    sleep 10
    /opt/open-xchange/sbin/showruntimestats -d 'java.util.logging:type=Logging!setLoggerLevel!!ALL!'
fi

有关条件的所有命令在shell和cron上正常工作,除了 /etc/init.d/open-xchange start (尝试使用/ bin / bash /etc/init.d/open- xchange start,service open-xchange start,...)

3 个答案:

答案 0 :(得分:1)

您的cronjob可能没有设置所有路径。如果它在命令行中起作用,请执行

echo $PATH
在该命令行上

并添加

PATH=<...>

<...>替换为echo命令输出中给出的PATH。使用

启动脚本
<scriptname> 2>/tmp/script.log

并在cronjob跑完后查看发生了什么。

顺便说一句,要检查open-xchange的状态,似乎可以使用

/etc/init.d/open-xchange status

答案 1 :(得分:1)

  

/opt/open-xchange/lib/oxfunctions.sh:line 109:start-stop-daemon:   命令未找到

启动选项是调用命令start-stop-daemon来启动服务,3个选项中的任何一个都可以解决您的问题:

  1. 在/etc/init.d/open-xchange中找出start-stop-daemon的位置, 用它的完整路径替换它
  2. export PATH=$PATH:/path/to/start-stop-daemon/directory添加到您的帐户中 脚本
  3. source ~/.bash_profilesource ~/.bashrc添加到您的脚本

答案 2 :(得分:0)

非常感谢@Coroos&amp; @ruifeng

阅读完回复后,我了解Crontab上路径的问题。

尝试了几个选项之后,对我来说最好的是在 bash脚本之上添加PATH和SHELL变量(与root用户相同),使用crontab运行,并且正常工作。

!/bin/sh
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/open-xchange/sbin

工作正常