Centos
使用單引號的 sh bash 腳本模糊重定向文件的 pid
我的 .sh 文件中有以下新行
su --session-command='$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile' $serviceUser || return 1
當我使用雙引號時,它有點工作,但是 pidFile 的 pid 錯誤,它被關閉了一個。研究的解決方案是使用單引號,但我無法使用單引號。
我現在得到 2 個錯誤
重擊: $ pidFile: ambiguous redirect bash: $ serviceLogFile:不明確的重定向
似乎我不能使用變數或輸出到單引號中的變數?
這一行幾乎可以工作,但 pid 已關閉
下面的程式碼將從啟動開始,但 pid 錯誤。
su --session-command="$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1
它必須替換這個有問題的舊 2 行程式碼。
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
舊程式碼執行良好,但無法從啟動中啟動。
程序 ID 減一,因為您
&
在$javaCommandLine
. 換句話說,您在呼叫 之前已將兩個程序置於後台echo $!
,從而獲得了>>$serviceLogFile 2>&1
而不是的 PID$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