/home/jack/myscript.sh
这是我要运行的脚本:
export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.26/
/home/jack/myapp/apache-tomcat-6.0.32/bin/./catalina.sh run
/etc/init/myapp.conf
我写的新贵文件:
description "Myapp Server"
start on runlevel [2345]
stop on runlevel [06]
respawn
respawn limit 10 5
exec `su jack -c /home/jack/myscript.sh`
那么,如果我想以 user 身份运行脚本jack
,我的上述配置是否有效?有更好的方法吗?
答案1
根据新贵食谱,计划以不同用户身份运行服务的内置功能,但尚未实现。
如果有start-stop-daemon
,请使用它。
exec start-stop-daemon --start -u jack --exec /home/jack/myscript.sh
否则,使用su
(就像你所做的那样)或sudo
.请注意,start-stop-daemon
始终切换到指定的用户(除非出现错误),而su
和 则sudo
遵守其自己的策略(特别是大多数系统上的 PAM 策略)。
请注意,在您的情况下,您不需要中间脚本。您可以直接从 Upstart 服务定义设置环境变量。
description "Myapp Server"
start on runlevel [2345]
stop on runlevel [06]
respawn
respawn limit 10 5
env JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.26/
exec /home/jack/myapp/apache-tomcat-6.0.32/bin/catalina.sh run
答案2
从 Upstart 1.4 开始,Upstart 能够使用setuid
和setgid
节以指定用户身份运行系统作业,例如:
setuid username
setgid groupname
在以前的版本中我们可以使用用户职位,它们存储在用户主文件夹中。
或者在 exec 命令中使用某些应用程序。
如果start-stop-daemon
可用:
exec start-stop-daemon --start -c myuser --exec command
和sudo
:
exec sudo -u myuser command
和su
:
exec su -s /bin/sh -c 'exec "$0" "$@"' myuser -- command [parameters...]
更多信息这里
答案3
如果您想以会话用户身份运行它,只需创建一个会话作业(从 1.7 开始)而不是系统作业。当涉及到环境变量时,此类作业不像系统作业那样受到限制,并且以会话用户的身份执行。