我的 .sh 檔案中有以下新行
su --session-command='$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile' $serviceUser || return 1
當我用雙引號括起來時,它有點工作,但 pidFile 的 pid 錯誤,它減少了 1。研究的解決方案是使用單引號,但我無法讓單引號運作。
我現在收到 2 個錯誤
bash: $pidFile: 不明確的重定向
bash: $serviceLogFile: 不明確的重定向
似乎我不能使用變數或輸出到單引號中的變數?
這一行幾乎可以工作,但 pid 關閉了 1
下面的程式碼將從啟動開始,但 pid 錯誤。
su --session-command="$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1
它必須替換這個有缺陷的舊兩行程式碼。
cmd="nohup $javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile"
# Don't forget to add -H so the HOME environment variable will be set correctly.
sudo -u $serviceUser -H $SHELL -c "$cmd" || return 1
舊代碼工作正常,但無法從啟動時啟動。
答案1
進程 ID 減一,因為您&
在$javaCommandLine
.換句話說,您在呼叫 之前已將兩個進程置於後台echo $!
,從而獲得 的 PID>>$serviceLogFile 2>&1
而不是$javaCommandLine
。這兩部分應該放在一起,如舊的 2 行程式碼所示
su --session-command="$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1
您可能需要將其更改為 -
su --session-command="$javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1