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