多个PID存储在PID文件中

时间:2016-11-01 20:12:45

标签: linux bash init.d

我已经开发了一个启动Java程序的System V init脚本。由于某种原因,无论何时创建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 1669016619是手动运行上述ps aux...命令时找到的实际进程ID。

2 个答案:

答案 0 :(得分:1)

尝试倒转你的greps。第一个(-vE)可以在myservice启动之前运行。 Grep为您的服务第一,然后筛选出不需要的行:

PID=$(ps aux | grep <myservice> | grep -vE 'grep|runuser|bash' | awk '{print $2}')

答案 1 :(得分:0)

我遇到了同样的问题但不是同样的陈述,是这样的:

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}')"