【发布时间】:2017-03-15 01:18:28
【问题描述】:
我有一个我开发的用于启动 Java 程序的 System V 初始化脚本。出于某种原因,每当创建 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。
【问题讨论】:
-
我建议您删除最后一个 awk 命令并检查发生了什么...
-
您只对获取
pid感兴趣。不要使用ps,而是使用pgrep。它只返回pid。试试PID=$(pgrep -f <myservice>)。或者走捷径。不要分配给$PID。试试pgrep -f <myservice> > $pidfile。