"su -c"で始まるコマンドからプロセスIDを取得する

シェルでJavaプログラムを実行し、プロセスIDをテキストファイルに書き込みます。だから私がするとき:

nohup java app.Main > /dev/null 2>&1 &
echo $! > /var/run/app.pid

効果があるしかし、別のユーザーとして実行したいと思います。

su - appuser -c "nohup java app.Main > /dev/null 2>&1 &"
echo $! > /var/run/app.pid

これはうまくいきません。 -cオプションで始まるコマンドのプロセスIDを取得する方法はありますか?

ベストアンサー1

あなたはできます:

su - appuser -c 'nohup java app.Main > /dev/null 2>&1 &
                 echo "$!"' > /var/run/app.pid

(仮想ログインシェルはappuserBourneに似ています。)

su -環境をリセットするので、コマンドラインから変数を拡張するには、次のパスを渡す必要があります。あなたのシェル(リモートユーザーのログインシェルではない)、例:

su - appuser -c "nohup '$JAVA_BIN' '$JAVA_CLASS' > /dev/null 2>&1 &"'
                 echo "$!"' > /var/run/app.pid

(これらの変数に一重引用符文字が含まれていないと仮定)。

シェル(書き込み権限がない可能性があります)rootではなく、シェル(として実行中)でリダイレクトを実行したいです。appuser/var/run

おすすめ記事