定时任务:
*/1 * * * * bash /opt/rocket/bin/monitor.sh
shell 脚本代码如下:
#!bin/bash
source ~/.bash_profile
LOG_FILE='/opt/rocket/bin/logs/monitor_sh.log'
# 打印日志,传一个参数($1 日志体)
function log() {
local time=$(date "+%Y-%m-%d %H:%M:%S")
echo "[$time] $0 : $1 " >> ${LOG_FILE}
}
# 用来搜进程有几条,没有就返回 0
# $1 : 进程名
function checkProcess() {
if [ -z $1 ];
then
log "Input parameter is empty."
return 0
fi
pid=`ps -ef | grep "rocket" | grep -v grep | awk '{print $2}'`
echo $pid
}
declare -i pid #声明变量为整形
pName="rocket" #要查看的进程名
pid=`checkProcess ${pName}`
if [ $pid -eq 0 ]
then
log "No specified ${pName} service starts."
bash start.sh
else
log "The specified service ${pName} has been started, pid=${pid}."
fi
日志文件(部分)如下:
- [2019-07-17 16:57:54] monitor.sh : The specified service rocket has been started, pid=15460.
- [2019-07-17 16:58:01] /opt/rocket/bin/monitor.sh : No specified rocket service starts.
- [2019-07-17 16:58:45] monitor.sh : The specified service rocket has been started, pid=15460.
- [2019-07-17 16:59:01] /opt/rocket/bin/monitor.sh : No specified rocket service starts.
- [2019-07-17 17:00:01] /opt/rocket/bin/monitor.sh : No specified rocket service starts.
- [2019-07-17 17:01:01] /opt/rocket/bin/monitor.sh : No specified rocket service starts.
- [2019-07-17 17:01:16] monitor.sh : The specified service rocket has been started, pid=15460.
- [2019-07-17 17:02:01] /opt/rocket/bin/monitor.sh : No specified rocket service starts.
- [2019-07-17 17:03:01] /opt/rocket/bin/monitor.sh : No specified rocket service starts.
- [2019-07-17 17:04:01] /opt/rocket/bin/monitor.sh : No specified rocket service starts.
- [2019-07-17 17:05:01] /opt/rocket/bin/monitor.sh : No specified rocket service starts.
shell 脚本用途是检测 java 进程是否存在,若不存在就执行另一个启动脚本,此处场景是存在的,即我手动执行时打印的 15460 号
看日志打印的文件名, 只有文件名 monitor.sh 的是我手动执行的,绝对路径是定时任务执行的。
那么问题来了,这是个什么情况? 如何解决?