2016-11-01 60 views
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 1669016619是手動運行上述ps aux...命令時發現的實際進程ID。

+1

我建議你刪除最後一個awk命令,並檢查這是怎麼回事... –

+1

你只得到'pid'感興趣。而不是使用'ps'使用'pgrep'。它只返回'pid'。試試'PID = $(pgrep -f​​)'。或者走捷徑。不要分配給'$ PID'。試試'pgrep -f​​> $ pidfile'。 – alvits

回答

1

嘗試倒轉你的greps。第一個(-vE)可能在myservice啓動之前運行。 grep的爲您服務,然後再過濾掉不需要的行:

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