回答:
できるよ:
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
)。
su - appuser -c "nohup $JAVA_BIN $JAVA_CLASS > /dev/null 2>&1 & echo \$! > /tmp/appid.tmp"