シェルで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
(仮想ログインシェルはappuser
Bourneに似ています。)
su -
環境をリセットするので、コマンドラインから変数を拡張するには、次のパスを渡す必要があります。あなたのシェル(リモートユーザーのログインシェルではない)、例:
su - appuser -c "nohup '$JAVA_BIN' '$JAVA_CLASS' > /dev/null 2>&1 &"'
echo "$!"' > /var/run/app.pid
(これらの変数に一重引用符文字が含まれていないと仮定)。
シェル(書き込み権限がない可能性があります)root
ではなく、シェル(として実行中)でリダイレクトを実行したいです。appuser
/var/run