crontab无法通过工作脚本启动服务

我的脚本在单独运行时工作,但不通过crontab

crontab的

[root@someserver:/]# crontab -l SHELL=/bin/bash PATH=/usr/lib64/qt-3.3/bin:/home/ec2/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin */1 * * * * /bin/bash /opt/scripts/check_beaver_status.sh 

有问题的脚本

 #!/bin/bash function check_if_beaver_running () { current_script=`basename $0` process_name="beaver" /bin/ps aux | /bin/grep "${process_name}" | /bin/grep -v 'grep' | /bin/grep -v "$current_script" if [ $? -eq 0 ]; then echo "${process_name} running" else echo "${process_name}: not running, starting..." if [ -f /var/run/logstash_beaver.pid ] ; then /bin/rm -f /var/run/logstash_beaver.pid fi /sbin/service beaver start fi } check_if_beaver_running 

Crond没有运行。

 [root@someserver:]# service crond status crond is stopped [root@someserver:]# service crond start [root@someserver:]# chkconfig crond on 

我也改变了我的脚本:

 #!/bin/bash # when running in crontab: # SHELL=/bin/bash # PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # */10 * * * * /bin/bash beaver_ensure_running.sh START=false readarray -t PIDS < <(exec pgrep -x beaver) function stop_beaver { /usr/sbin/service beaver stop sleep 5s ## Optionally wait for processes to stop. kill -s SIGTERM "${PIDS[@]}" ## Perhaps force another signal to them if it doesn't work with defuncts. sleep 5s ## Optionally wait for processes to stop. kill -s SIGKILL "${PIDS[@]}" ## Perhaps force another signal to them if it doesn't work with defuncts. START=true } if [[ ${#PIDS[@]} -eq 0 ]]; then echo "No beaver process was found." START=true elif [[ ${#PIDS[@]} -eq 1 ]]; then echo "Processes found: ${PIDS[*]}" echo "Only one beaver process found." stop_beaver elif ps -fp "${PIDS[@]}" | fgrep -F '<defunct>' >/dev/null; then echo "Processes found: ${PIDS[*]}" echo "Defunct beaver process found." stop_beaver else echo "Processes found: ${PIDS[*]}" fi [[ $START == true ]] && /usr/sbin/service beaver start 

我对这个答案很感兴趣,所以让我帮你诊断一下。

尝试将cron更改为:

 */1 * * * * /bin/bash -x /opt/scripts/check_beaver_status.sh > /tmp/crondiag.log 2>&1 

另外添加命令:

 env 

在脚本的顶部,以及脚本中函数调用的底部。

让它运行一次,并与我们分享结果。 也许在pastie.org什么的。