Shell 脚本不工作进程只杀死除了三个进程之外的两个进程

Shell script not working process just killing only 2 process apart from three process

以下脚本不是通过 crontab 运行。请告知我需要采取什么步骤来解决此问题。当我手动触发时,此脚本运行良好。

定时任务表:-

### Repack Restart
33 01 * * 1,2,3,4,5  /home/repackpr/scripts/repack_restart_script.sh > /tmp/repack_log16234.log 2>&1

repack_restart_script.sh :

 #!/usr/bin/bash
    cd /home/repackpr
    today_date=`date '+%Y%m%d'`
    DATE_STAMP=`TZ=CST+24 date +%Y%m%d`

tomcat_pid=$(pgrep -U $USER java)
rmireg_pid=$(pgrep -U $USER rmiregistry)
nagios_pid=$(pgrep -U $USER nrpe)

export tomcat_pid
export rmireg_pid
export nagios_pid

    #Removing old logs

    rm /home/repackpr/scripts/Repack_$DATE_STAMP.log
    rm /home/repackpr/scripts/Repack_feed_mgt_$DATE_STAMP.log
    rm /home/repackpr/scripts/Repack_Stop_$DATE_STAMP.log

    # Stopping Services
    /home/repackpr/server stop
    kill -9 `ps -fu repackpr -o pid,comm | egrep 'java|repackpr' | awk '{print }'`
    /home/repackpr/server status > /home/repackpr/scripts/Repack_Stop_$today_date.log

    #Starting Services
    export CATALINA_OPTS="-Dcom.sun.management.jmxremote.port=8071 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
    /home/repackpr/server start
    /home/repackpr/server status > /home/repackpr/scripts/Repack_$today_date.log

    VALUE=`grep up /home/repackpr/scripts/Repack_$today_date.log|wc -l`
    if [ $VALUE -eq 3 ]
    then
        /apps/repack/jetty/start.sh > /home/repackpr/scripts/Repack_feed_mgt_$today_date.log &  #####Starting Repack Feed Management######
        echo "Repack services has been started successfully"|mailx -s "Repack Service Restart--SUCCESS" rates-it_pune@xyz.com     else
        echo "Please perform the Repack service restart check" |mailx -s "Repack Service Restart--FAIL" rates-it_pune@list.xyz.com
    fi

服务器脚本 :- 此脚本从 repack_restart_script.sh 调用 --> 即 /home/repackpr/server 停止

#!/bin/bash
# 

wait-n-kill () {
    echo Waiting up to a minute for a graceful shutdown
    for(( i=0; $i<60; i=$(($i+1)) )); do
       sleep 1
       kill -0  2>/dev/null || break
       echo -n .
    done
    echo
    kill -0  2>/dev/null && echo Still alive ... Killing it with dash nine && kill -9 
}

tomcat_pid=$(pgrep -U $USER java)
rmireg_pid=$(pgrep -U $USER rmiregistry)
nagios_pid=$(pgrep -U $USER nrpe)

case "" in
      "start")
          if [ -z $tomcat_pid ] ; then
             suffix=$(date +%Y%m%d-%H%M)
             echo Repack is not running. Creating rpdb.log.$suffix backup...
             cp /apps/repack/tomcat/webapps/rpdb/WEB-INF/fwk/log/rpdb.log /apps/repack/tomcat/webapps/rpdb/WEB-INF/fwk/log/rpdb.log.$suffix
             gzip /apps/repack/tomcat/webapps/rpdb/WEB-INF/fwk/log/rpdb.log.$suffix
             echo Starting Repack... This should start rmiregistry as well.
             $TOMCAT_EXE/startup.sh
          else
             echo Repack is already running
          fi
          if [ -f ~/monitoring/go.sh  ] ; then
             if [ -z $nagios_pid ] ; then
                echo Starting Nagios agent
                cd ~/monitoring && ./go.sh
             fi
          fi ;;
      "stop")
          if [ ! -z $tomcat_pid ] ; then
             echo Stopping Repack
             $TOMCAT_EXE/shutdown.sh
             wait-n-kill $tomcat_pid
          fi
          [ ! -z $rmireg_pid ] && echo Killing rmiregistry && kill $rmireg_pid && wait-n-kill $rmireg_pid
          [ ! -z $nagios_pid ] && echo Killing Nagios && kill $nagios_pid && wait-n-kill $nagios_pid
esac

tomcat_pid=$(pgrep -U $USER java)
rmireg_pid=$(pgrep -U $USER rmiregistry)
nagios_pid=$(pgrep -U $USER nrpe)

[ ! -z "$tomcat_pid" ] &&                               echo "Repack      is up ($tomcat_pid)" || echo "Repack      is down"
[ ! -z "$rmireg_pid" ] &&                               echo "rmiregistry is up ($rmireg_pid)" || echo "rmiregistry is down"
[ $REPACK_ENV = "PROD" ] && ( [ ! -z "$nagios_pid" ] && echo "Nagios      is up ($nagios_pid)" || echo "Nagios      is down" )

/tmp/repack_log16234.log

 pgrep: invalid user name -- java
        pgrep: invalid user name -- rmiregistry
        pgrep: invalid user name -- nrpe
        /home/repackpr/scripts/Repack_20160322.log: No such file or directory
        /home/repackpr/scripts/Repack_feed_mgt_20160322.log: No such file or directory
        pgrep: invalid user name -- java
        pgrep: invalid user name -- rmiregistry
        pgrep: invalid user name -- nrpe
        pgrep: invalid user name -- java
        pgrep: invalid user name -- rmiregistry
        pgrep: invalid user name -- nrpe
        Repack      is down
        rmiregistry is down
        /home/repackpr/server: line 54: [: =: unary operator expected
        pgrep: invalid user name -- java
        pgrep: invalid user name -- rmiregistry
        pgrep: invalid user name -- nrpe
        pgrep: invalid user name -- java
        pgrep: invalid user name -- rmiregistry
        pgrep: invalid user name -- nrpe
        /home/repackpr/server: line 54: [: =: unary operator expected
        pgrep: invalid user name -- java
        pgrep: invalid user name -- rmiregistry
        pgrep: invalid user name -- nrpe
        Repack is not running. Creating rpdb.log.20160323-0133 backup...
        Starting Repack... This should start rmiregistry as well.
        /home/repackpr/server: line 28: /startup.sh: No such file or directory
        Starting Nagios agent
        Nagios agent has been started
        pgrep: invalid user name -- java
        pgrep: invalid user name -- rmiregistry
        pgrep: invalid user name -- nrpe
        Repack      is down
        rmiregistry is down
        /home/repackpr/server: line 54: [: =: unary operator expected
        pgrep: invalid user name -- java
        pgrep: invalid user name -- rmiregistry
        pgrep: invalid user name -- nrpe
        pgrep: invalid user name -- java
        pgrep: invalid user name -- rmiregistry
        pgrep: invalid user name -- nrpe
        /home/repackpr/server: line 54: [: =: unary operator expected

编辑: cron 运行s 在服务器定义的时区上。您需要检查您的服务器时区,然后设置您自己的 cron。假设您的服务器时区是 GMT:

33 01 * * 1-5 command-to-be-executed

cron 格式如下:

* * * * * 
| | | | | 
| | | | | 
| | | | +---- Day of the Week   (range: 1-7 or 0-6, 7/0 = Sunday)
| | | +------ Month of the Year (range: 1-12)
| | +-------- Day of the Month  (range: 1-31)
| +---------- Hour              (range: 0-23)
+------------ Minute            (range: 0-59)

查看更多 cron 格式示例 here

请提供更多信息,说明您希望通过 cron 运行 脚本的频率,然后我们可以帮助确定输出应该是什么样子。

cron 作业的问题与命令行作业 运行 的工作方式不同,通常源于这样一个事实,即环境的设置方式不同。

错误消息表明,pgrep 是在某处使用不正确的用户名调用的,可能是缺少环境变量的结果。由于您发布的代码中没有 pgrep,我猜这是在从您的 cron 作业调用的某些脚本中调用的,该脚本必须是 ~repackpr/server/apps/repack/jetty/start.sh。尝试找到调用 pgrep 的位置,然后从那里向后工作。