好奇怪的问题
来源:5-7 命令替换(下)
secrethaha
2019-03-03
老师您好 我遇到了个 很奇怪的问题
我虚拟机上装了nginx 我把它给停止了
我直接在终端输入echo $(ps aux|grep nginx | grep -v grep | wc -l) 是等于0
可是我在shell脚本里打印确是2
[root@VM_0_12_centos shellfile]# ps aux|grep nginx
root 30657 0.0 0.0 112704 976 pts/0 S+ 14:47 0:00 grep --color=auto nginx
[root@VM_0_12_centos shellfile]# echo $(ps aux|grep nginx | grep -v grep | wc -l)
0
[root@VM_0_12_centos shellfile]# sh ziqi_nginx.sh
process:2
[root@VM_0_12_centos shellfile]# cat ziqi_nginx.sh
#!/bin/bash
nginx_process_num=$(ps aux|grep nginx | grep -v grep | wc -l)
echo "process:$nginx_process_num"
if [ $nginx_process_num -eq 0 ];then
echo "nginx down"
/usr/local/nginx/sbin/nginx
echo "nginx start"
fi
[root@VM_0_12_centos shellfile]#
写回答
1回答
-
你的脚本名称是不是包含了nginx这个字符串,如果是的话,执行脚本就会在系统中生成一个进程,所以你再ps,会得到一个存在的结果!但终端执行就没问题,老师课程中讲到这个问题了,也有规避办法……就是在脚本中通过$$获取到脚本执行的PID,然后将其grep -v过滤掉,就能得到正确的结果了!如果看不明白,可以把你的代码拍照发上来,我修改后给你标注发过去,你看了就明白了……有问题再联系哦
222021-02-20
相似问题