请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

好奇怪的问题

老师您好 我遇到了个 很奇怪的问题
我虚拟机上装了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过滤掉,就能得到正确的结果了!如果看不明白,可以把你的代码拍照发上来,我修改后给你标注发过去,你看了就明白了……有问题再联系哦

2 回复 有任何疑惑可以回复我~
  • 提问者 secrethaha #1
    非常感谢!果然还是脚本名称包含了nginx 谢谢老师
    回复 有任何疑惑可以回复我~ 2019-03-03 16:03:02
  • 确实神奇
    回复 有任何疑惑可以回复我~ 2021-02-20 13:16:41
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信