请教各位一个shell脚本的问题条件判断问题

foxh1s
  • 5
新手上路,请多包涵

我设想的功能:

1、先检测相关进程,若相关进程的PID存在,则提示进程已存在
2、若检测不到相关进程的PID,则执行启动命令
这两步我已经实现。
3、启动第2步的进程之后,再次检测进程
4、执行第3步的进程检测后,若进程存在,则发出成功提示,若进程不存在,则发出失败提示。

我目前的代码:

function start_namesrv() {
NAMESRV_PID=`ps -ax | grep -v grep | grep java | grep -i 'org.apache.rocketmq.namesrv.NamesrvStartup' | awk '{print $1}'`
        if [[ -n ${NAMESRV_PID} ]];then
                echo -e "\033[1;42;37m +++ The RocketMQ_namesrv(${NAMESRV_PID}) is already exsit... \033[0m"
        else
                cd ${ROCKETMQ_BIN}
                nohup sh mqnamesrv -n ${ADDR}:${NAMESRV_PORT} > ${NAMESRV_RUN_LOG} 2>&1 &
回复
阅读 787
1 个回答
zxdposter
  • 1.2k
✓ 已被采纳
function start_namesrv() {
NAMESRV_PID=`ps -ax | grep -v grep | grep java | grep -i 'org.apache.rocketmq.namesrv.NamesrvStartup' | awk '{print $1}'`
        if [[ -n ${NAMESRV_PID} ]];then
                echo -e "\033[1;42;37m +++ The RocketMQ_namesrv(${NAMESRV_PID}) is already exsit... \033[0m"
        else
                cd ${ROCKETMQ_BIN}
                # 如果 sleep 5 秒后,pid 不存在,将会报错
                nohup sh mqnamesrv -n ${ADDR}:${NAMESRV_PORT} > ${NAMESRV_RUN_LOG} 2>&1
                sleep 5
                kill -0 $!
                if [ $? -ne 0 ]; then echo 'start failure'; else echo 'start success'; fi
                
}



# 启动
start_namesrv
宣传栏