以较低权限的用户身份使用 upstart 运行 bash 脚本

nix*_*win 5 users upstart

这是/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
Run Code Online (Sandbox Code Playgroud)

/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`
Run Code Online (Sandbox Code Playgroud)

那么,如果我想以 user 身份运行脚本jack,我上面的配置会起作用吗?有更好的方法吗?

Gil*_*il' 5

根据Upstart Cookbook,以不同用户身份运行服务的内置功能已计划但尚未实施。

如果有start-stop-daemon,请使用它。

exec start-stop-daemon --start -u jack --exec /home/jack/myscript.sh
Run Code Online (Sandbox Code Playgroud)

否则,请使用su(就像您一样)或sudo. 请注意,start-stop-daemon始终切换到指示的用户(禁止错误),而susudo遵守他们自己的策略(特别是大多数系统上的 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
Run Code Online (Sandbox Code Playgroud)