Answers:
你可以做:
su - appuser -c 'nohup java app.Main > /dev/null 2>&1 &
echo "$!"' > /var/run/app.pid
(假设的登录外壳appuser
类似于Bourne)。
su -
重置环境,所以如果你想在命令行扩展型变量,它必须通过做你的壳(不是远程用户的登录shell),如:
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"