我开发了一个System init脚本,它启动了一个Java程序。由于某种原因,每当创建PID文件时,它都包含多个PID,而不是一个。
下面是启动服务并写入PID文件的相关代码:
daemon --pidfile=$pidfile "$JAVA_CMD &" >> $logfile 2>&1
RETVAL=$?
usleep 500000
if [ $RETVAL -eq 0 ]; then
touch "$lock"
PID=$(ps aux | grep -vE 'grep|runuser|bash' | grep <myservice> | awk '{print $2}')
echo $PID > $pidfile当我手动测试ps aux...命令时,一行将返回。在作为脚本运行时,此调用似乎正在返回多个PID。
PID文件中的示例内容:16601 16602 16609 16619 16690。16619是在手动运行上面提到的ps aux...命令时找到的实际进程ID。
发布于 2016-11-01 20:16:24
试着倒转你的酒杯。第一个(-vE)可以在启动myservice之前运行。Grep首先用于您的服务,然后过滤掉不需要的行:
PID=$(ps aux | grep <myservice> | grep -vE 'grep|runuser|bash' | awk '{print $2}')发布于 2021-06-30 02:27:33
我说的是同一个问题,但不是同一句话,它是这样的:
PID="$(ps -ef|grep command|grep options|grep -v grep|awk '{print $2}')"在其中,我使用了与@Marc在第一次回答中相同的grep顺序,但没有过滤掉所有不想要的行。所以我试了下一个,它成功了:
PID="$(ps -ef|grep command|grep options|grep -vE 'grep|runuser|bash'|awk '{print $2}')"https://stackoverflow.com/questions/40367902
复制相似问题