作为非特权用户的 Upstart 作业因权限被拒绝而失败

作为非特权用户的 Upstart 作业因权限被拒绝而失败

我正在尝试设置一个以非特权用户身份运行的 Sage Cell Server(开源数学引擎)。我已经创建了非特权用户sagecell来完成这项工作。它安装正确,如果我正常运行它

sagecell@primary-server:~/sage/devel/sagecell$ ../../sage web_server.py

然后一切都按预期进行。该应用程序的一个有趣的要求(可能相关也可能不相关)是它需要无密码 ssh 登录(即ssh localhost有效)。我已经使用 ssh 密钥设置了非特权帐户来完成这项工作。

现在,我尝试使用以下设置创建一个新的工作,而不是在启动服务器并在屏幕会话中运行它后手动创建屏幕会话:

description "Sage Cell Server Starter"

start on runlevel [2345]
stop on starting rc runlevel=[016]

kill timeout 5

exec su -s /bin/sh -c 'exec "$0" "$@"' sagecell -- /home/sagecell/sage/sage /home/sagecell/sage/devel/sagecell/web_server.py

然而,这是行不通的。查看 /var/log/upstart/sagecell.log 会出现以下错误:

2013-02-20 00:11:09,665 sagecell:INFO starting tornado web server
Traceback (most recent call last):
  File "/home/sagecell/sage/devel/sagecell/web_server.py", line 78, in <module>
    application = SageCellServer()
  File "/home/sagecell/sage/devel/sagecell/web_server.py", line 57, in __init__
    kernel_timeout=kernel_timeout)
  File "/home/sagecell/sage-5.7.rc0/devel/sagecell-main/trusted_kernel_manager.py", line 28, in __init__
    self._sender = sender.AsyncSender() # Manages asynchronous communication
  File "/home/sagecell/sage-5.7.rc0/devel/sagecell-main/sender.py", line 22, in __init__
    self.router.bind(self.filename)
  File "socket.pyx", line 489, in zmq.core.socket.Socket.bind (zmq/core/socket.c:4797)
zmq.core.error.ZMQError: Permission denied

编辑:应该注意的是,该应用程序绑定到端口 8080(据我所知,只有 8080)。重要的是,当我运行它时,它无需特权即可运行,但当 Upstart 以同一用户身份运行它时则不行。

谁能告诉我为什么在用户下运行得很好的应用程序sagecell无法在运行脚本 AS 的新贵作业下运行sagecell

相关内容