0
我有一个我开发的用于启动Java程序的System V初始化脚本。由于某种原因,每当创建PID文件时,它都包含多个PID而不是一个。存储在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)'。或者走捷径。不要分配给'$ PID'。试试'pgrep -f> $ pidfile'。 – alvits