我正在尝试设置一个 Ubuntu(12.04 LTS)upstart 脚本来管理 Trac 的内置 Web 服务器作为 nginx 的上游服务器。
这是我的初始化脚本/etc/init/tracd.conf
。我使用了http://codebyko.se/2010/11/26/tracd-with-upstart-on-ubuntu/(谷歌中“upstart”和“tracd”的第一个也是唯一一个结果)作为起点:
description "Tracd Web Server"
start on startup
stop on shutdown
expect daemon
exec sudo tracd -d -p 8000 -b 192.168.1.2 --user=www-data --group=www-data /trac/proj
每当我通过sudo service tracd start
或运行它时sudo service tracd stop
,它都会挂起并且永远不会返回。sudo service tracd status
返回“tracd start/killed,进程 748”。upstart 日志/var/log/upstart/tracd.log
不包含任何信息,syslog 也不包含任何信息。
如果我只是sudo tracd -d -p 8000 -b 192.168.1.2 --user=www-data --group=www-data /trac/proj
在命令行上复制并粘贴,服务器就可以正常运行。
这是我尝试过的:
- 谷歌搜索——很费劲。阅读 Ubuntu 的 upstart cookbook 页面和所有 Trac 指南:Trac安装,TracNginxRecipe,TracStandalone
- 使用
expect fork
,expect daemon
或者expect
完全省略该行。 - 在执行行周围使用
script
/块。end script
- 使用
setuid www-data
/setgid www-data
。 - 使用
sudo -u www-data
甚至sudo su www-data -c "..."
- 创建了一个 www-data 可写目录
/var/run/trac/
并指定--pidfile=/var/run/trac/tracd.pid
。 - 检查输出以
sudo -u www-data env
查看命令行中是否有任何特殊环境变量,因为从 shell 执行时运行良好。Trac 似乎不依赖任何环境变量。 - 使用了更为详细但相同的命令:
sudo /usr/bin/python /usr/local/bin/tracd --daemonize --port=8000 --hostname=192.168.1.2 --user=www-data --group=www-data /trac/proj
- 使用 检查僵尸 tracd 守护进程
ps -aux | grep trac
。
我还没尝试过的事情:
- 放弃 upstart,采用 init.d 脚本。
编辑:已修复
删除该--daemonize
标志似乎已经解决了问题。谢谢 Mike!这是我的工作 upstart 脚本:
description "Trac Web Server"
start on startup
stop on shutdown
setuid www-data
setgid www-data
exec tracd -p 8000 -b 192.168.1.2 /trac/proj
答案1
我认为你不需要 sudo,因为 tracd 正在设置用户/组
description "Tracd Web Server"
start on startup
stop on shutdown
expect daemon
exec tracd -p 8000 -b 192.168.1.2 --user=www-data --group=www-data /trac/proj
如果这不起作用,请尝试通过以下方式在 upstart 中设置运行用户setuid
:setgid
description "Tracd Web Server"
start on startup
stop on shutdown
setuid www-data
setgid www-data
expect daemon
exec tracd -p 8000 -b 192.168.1.2 /trac/proj
编辑
删除 -d 标志.. upstart 你不能以守护进程的形式运行某些东西,它需要像在前台运行一样