.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
このバグのある古い 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
古いコードは正常に動作しましたが、起動時から起動できませんでした。
答え1
&
の後に余分な を入れたため、プロセス ID が 1 つずれています$javaCommandLine
。つまり、 を呼び出す前に 2 つのプロセスをバックグラウンドに置いたため、ではなくecho $!
の PID が取得されます。古い 2 行のコードが示すように、これら 2 つの部分は 1 つにまとめる必要があります。>>$serviceLogFile 2>&1
$javaCommandLine
su --session-command="$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1
次のように変更する必要があるかもしれません -
su --session-command="$javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1