多个 PID 存储在 PID 文件中
Multiple PIDs being stored in PID file
我开发了一个 System V 初始化脚本,用于启动 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 }')
echo $PID > $pidfile
当我手动测试 ps aux...
命令时,单行 returns。当 运行 作为脚本时,似乎此调用正在返回多个 PID。
PID 文件中的示例内容:16601 16602 16609 16619 16690
。 16619
是手动运行上述ps aux...
命令时找到的实际进程ID。
尝试反转你的 greps。第一个 (-vE
) 可能 运行 在 myservice
启动之前。首先为您的服务 Grep,然后过滤掉不需要的行:
PID=$(ps aux | grep <myservice> | grep -vE 'grep|runuser|bash' | awk '{print }')
我遇到了同样的问题,但不是同样的说法,是这样的:
PID="$(ps -ef|grep command|grep options|grep -v grep|awk '{print }')"
其中我使用了与@Marc 在第一个答案中所说的相同的 grep 命令,但没有过滤掉所有不需要的行。
所以我尝试了下面的方法并且有效:
PID="$(ps -ef|grep command|grep options|grep -vE 'grep|runuser|bash'|awk '{print }')"
我开发了一个 System V 初始化脚本,用于启动 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 }')
echo $PID > $pidfile
当我手动测试 ps aux...
命令时,单行 returns。当 运行 作为脚本时,似乎此调用正在返回多个 PID。
PID 文件中的示例内容:16601 16602 16609 16619 16690
。 16619
是手动运行上述ps aux...
命令时找到的实际进程ID。
尝试反转你的 greps。第一个 (-vE
) 可能 运行 在 myservice
启动之前。首先为您的服务 Grep,然后过滤掉不需要的行:
PID=$(ps aux | grep <myservice> | grep -vE 'grep|runuser|bash' | awk '{print }')
我遇到了同样的问题,但不是同样的说法,是这样的:
PID="$(ps -ef|grep command|grep options|grep -v grep|awk '{print }')"
其中我使用了与@Marc 在第一个答案中所说的相同的 grep 命令,但没有过滤掉所有不需要的行。 所以我尝试了下面的方法并且有效:
PID="$(ps -ef|grep command|grep options|grep -vE 'grep|runuser|bash'|awk '{print }')"