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
的位置,然后从那里向后工作。
以下脚本不是通过 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
的位置,然后从那里向后工作。