Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 进程grep给出不明确的输出_Linux_Shell_Sh_Init.d - Fatal编程技术网

Linux 进程grep给出不明确的输出

Linux 进程grep给出不明确的输出,linux,shell,sh,init.d,Linux,Shell,Sh,Init.d,我有这个init.d脚本,在这里我检查应用程序的状态,预期的输出应该是 “应用程序正在以PID:XXXX运行” 无论如何,我将向您展示我使用的代码: ps -ef|grep -v grep |grep Jazz |grep -v "Jazz status"|awk '{ if ( $2 != "") print "Jazz Running with PID:",$2"; else print "Jazz not running";}' #!/bin/sh USER="xxxxxxx" PAS

我有这个init.d脚本,在这里我检查应用程序的状态,预期的输出应该是 “应用程序正在以PID:XXXX运行”

无论如何,我将向您展示我使用的代码:

ps -ef|grep -v grep |grep Jazz |grep -v "Jazz status"|awk '{ if ( $2 != "") print "Jazz Running with PID:",$2"; else print "Jazz not running";}'
#!/bin/sh

USER="xxxxxxx"
PASSWORD="xxxxxx"
start() {
su - netcool -c "/opt/IBM/tivoli/jazzSM/profile/bin/startServer.sh server1"

RETVAL=$?
return $RETVAL
}
stop() {
su - netcool -c "/opt/IBM/tivoli/jazzSM/profile/bin/stopServer.sh server1 -username ${USER} -password ${PASSWORD}"

RETVAL=$?
return $RETVAL
}
status() {
ps -ef|grep -v grep |grep Jazz |grep -v awk |grep -v "Jazz status" |awk '{ if ( $2!= "") print "Jazz is running with PID:",$2; else print "Jazz is not running";}'
#pid=$(pgrep -f Jazz) && echo "Jazz Running with PID: $pid" || echo "Jazz is not running"
}
case $1 in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart"|"reload")
stop
start
;;

*)
echo "usage: $0 {start|stop|status|restart|reload}"
RETVAL=1
esac
exit 0
在终端上运行此命令时,我得到以下输出:

    Jazz Running with PID: 6261
    Jazz Running with PID: 30077
#ps -ef|grep -v grep |grep Jazz |grep -v "Jazz status"|awk '{ if ( $2 != "") print $2}'   
300077
当我删除print语句并输出$2时,我得到以下输出:

    Jazz Running with PID: 6261
    Jazz Running with PID: 30077
#ps -ef|grep -v grep |grep Jazz |grep -v "Jazz status"|awk '{ if ( $2 != "") print $2}'   
300077
我希望输出是

Jazz Running with PID: 300773
我不明白为什么在第一种情况下我会得到两个PID? 第一个PID不断变化,类似于显示命令本身的PID


编辑: 输出:
ps-ef | grep Jazz

netcool  12744     1  5 13:03 ?        00:06:06 /opt/IBM/tivoli/webSphere/AppServer/java/bin/java -Declipse.security -Dwas.status.socket=38692 -Dosgi.install.area=/opt/IBM/tivoli/webSphere/AppServer -Dosgi.configuration.area=/opt/IBM/tivoli/jazzSM/profile/servers/server1/configuration -Djava.awt.headless=true -Dosgi.framework.extensions=com.ibm.cds,com.ibm.ws.eclipse.adaptors -Xshareclasses:name=webspherev85_1.6_64_%g,nonFatal -Xbootclasspath/p:/opt/IBM/tivoli/webSphere/AppServer/java/jre/lib/ibmorb.jar -classpath /opt/IBM/tivoli/jazzSM/profile/properties:/opt/IBM/tivoli/webSphere/AppServer/properties:/opt/IBM/tivoli/webSphere/AppServer/lib/startup.jar:/opt/IBM/tivoli/webSphere/AppServer/lib/bootstrap.jar:/opt/IBM/tivoli/webSphere/AppServer/lib/jsf-nls.jar:/opt/IBM/tivoli/webSphere/AppServer/lib/lmproxy.jar:/opt/IBM/tivoli/webSphere/AppServer/lib/urlprotocols.jar:/opt/IBM/tivoli/webSphere/AppServer/deploytool/itp/batchboot.jar:/opt/IBM/tivoli/webSphere/AppServer/deploytool/itp/batch2.jar:/opt/IBM/tivoli/webSphere/AppServer/java/lib/tools.jar -Dibm.websphere.internalClassAccessMode=allow -Xms512m -Xmx1024m -Xcompressedrefs -Xscmaxaot4M -Xscmx60M -Dws.ext.dirs=/opt/IBM/tivoli/webSphere/AppServer/java/lib:/opt/IBM/tivoli/jazzSM/profile/classes:/opt/IBM/tivoli/webSphere/AppServer/classes:/opt/IBM/tivoli/webSphere/AppServer/lib:/opt/IBM/tivoli/webSphere/AppServer/installedChannels:/opt/IBM/tivoli/webSphere/AppServer/lib/ext:/opt/IBM/tivoli/webSphere/AppServer/web/help:/opt/IBM/tivoli/webSphere/AppServer/deploytool/itp/plugins/com.ibm.etools.ejbdeploy/runtime -Dderby.system.home=/opt/IBM/tivoli/webSphere/AppServer/derby -Dcom.ibm.itp.location=/opt/IBM/tivoli/webSphere/AppServer/bin -Djava.util.logging.configureByServer=true -Duser.install.root=/opt/IBM/tivoli/jazzSM/profile -Djava.ext.dirs=/opt/IBM/tivoli/webSphere/AppServer/tivoli/tam:/opt/IBM/tivoli/webSphere/AppServer/java/jre/lib/ext -Djavax.management.builder.initial=com.ibm.ws.management.PlatformMBeanServerBuilder -Dpython.cachedir=/opt/IBM/tivoli/jazzSM/profile/temp/cachedir -Dwas.install.root=/opt/IBM/tivoli/webSphere/AppServer -Djava.util.logging.manager=com.ibm.ws.bootstrap.WsLogManager -Dserver.root=/opt/IBM/tivoli/jazzSM/profile -Dcom.ibm.security.jgss.debug=off -Dcom.ibm.security.krb5.Krb5Debug=off -Dfas.install.location=/opt/IBM/tivoli/jazzSM/admin -Dfas.ui.install.location=/opt/IBM/tivoli/jazzSM/admin_ui -Djava.library.path=/opt/IBM/tivoli/webSphere/AppServer/lib/native/linux/x86_64/:/opt/IBM/tivoli/webSphere/AppServer/java/jre/lib/amd64/default:/opt/IBM/tivoli/webSphere/AppServer/java/jre/lib/amd64:/opt/IBM/tivoli/webSphere/AppServer/bin:/usr/lib:/opt/IBM/tivoli/jazzSM/reporting/cognos/bin64: -Djava.endorsed.dirs=/opt/IBM/tivoli/webSphere/AppServer/endorsed_apis:/opt/IBM/tivoli/webSphere/AppServer/java/jre/lib/endorsed:/opt/IBM/tivoli/webSphere/AppServer/endorsed_apis:/opt/IBM/tivoli/webSphere/AppServer/java/jre/lib/endorsed -Djava.security.auth.login.config=/opt/IBM/tivoli/jazzSM/profile/properties/wsjaas.conf -Djava.security.policy=/opt/IBM/tivoli/jazzSM/profile/properties/server.policy com.ibm.wsspi.bootstrap.WSPreLauncher -nosplash -application com.ibm.ws.bootstrap.WSLauncher com.ibm.ws.runtime.WsServer /opt/IBM/tivoli/jazzSM/profile/config JazzSMNode01Cell JazzSMNode01 server1
netcool  19735 19678  0 14:50 pts/0    00:00:00 grep Jazz

编辑 我使用的完整init.d脚本:

ps -ef|grep -v grep |grep Jazz |grep -v "Jazz status"|awk '{ if ( $2 != "") print "Jazz Running with PID:",$2"; else print "Jazz not running";}'
#!/bin/sh

USER="xxxxxxx"
PASSWORD="xxxxxx"
start() {
su - netcool -c "/opt/IBM/tivoli/jazzSM/profile/bin/startServer.sh server1"

RETVAL=$?
return $RETVAL
}
stop() {
su - netcool -c "/opt/IBM/tivoli/jazzSM/profile/bin/stopServer.sh server1 -username ${USER} -password ${PASSWORD}"

RETVAL=$?
return $RETVAL
}
status() {
ps -ef|grep -v grep |grep Jazz |grep -v awk |grep -v "Jazz status" |awk '{ if ( $2!= "") print "Jazz is running with PID:",$2; else print "Jazz is not running";}'
#pid=$(pgrep -f Jazz) && echo "Jazz Running with PID: $pid" || echo "Jazz is not running"
}
case $1 in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart"|"reload")
stop
start
;;

*)
echo "usage: $0 {start|stop|status|restart|reload}"
RETVAL=1
esac
exit 0
希望这有帮助


更新 根据@jlliagre的建议,运行以下命令仍然会将多个PID作为输出:

[root@hjkpnlinst04 ~]# pid=$(pgrep -f jazzSM) && echo "Jazz Running with PID: $pid" || echo "Jazz is not running"
Jazz Running with PID: 12744
13176
13299
目前,我正在运行此命令,该命令似乎在进程运行时为我提供所需的输出,但在进程未运行时无法为我提供“else”输出:

ps -ef|grep -v grep |grep Jazz |grep -v awk |grep -v "Jazz status" |awk '{ if ( $2!= "") print "Jazz is running with PID:",$2; else print "Jazz is not running";}'

很可能你找到了awk。你排除了grep,但不是awk。 更好的方法是使用pgrep命令,例如:

echo "java is running with pids ", `pgrep java`
将列出运行的所有pids Java进程。它只查看进程映像名称,而不在命令行上。我不确定pgrep的可移植性如何,但它在Linux、FreeBSD和OSX上都有,对我来说已经足够好了

但是看看你更新的答案,我发现你在寻找命令行关键字,所以像@jlliagre建议的那样,你应该使用-f开关。pgrep的优点是它足够聪明,可以排除自身,这与AWK和GREP链不同。

该命令应该可以工作(假设
pgrep
可用):


我建议您使用ps-ef | grep-v‘Jazz status’| grep Jazz | grep-v grept上述命令为我提供了正确的输出,但我希望以一种优雅的方式提供输出,而不是整个过程的细节。谢谢您,包括grep-v awk。但我以前从未面对过这个问题。无论如何,我只是好奇如何使用pgrep实现相同的功能?第一个命令不产生输出,但是第二个命令给我输出,但是又有两个PID
#/etc/init.d/Jazz status Jazz使用PID:12744 16347运行
如果您给出Jazz进程所使用的命令行,将会有所帮助
ps-ef | grep Jazz
(将其添加到原始问题中,而不是此处,因为注释不保留格式)。init.d脚本的名称是什么?请看我的更新答案。Jazz。我以
Jazz状态运行它,这就是问题所在,请尝试我更新的脚本,它使用“jazzSM”而不是“Jazz”,以避免选择init.d脚本。