我upstart v1.4用来启动我的应用程序服务器,它被称为unicorn.
upstart配置文件如下所示:
description "Unicorn Application Server"
start on network
stop on runlevel [!2345]
umask 0003
setuid unicorn
setgid myproject
chdir /opt/myproject/
respawn
exec /opt/myproject/bin/unicorn --config-file /opt/myproject/config/unicorn.rb --env production
进程必须使用 运行0774,也就是说ug+rwxo+r,至少对于目录来说是这样。用户和组是共享的,例如 nginx 服务器、上传、员工登录等。
我观察到目录是使用错误的权限创建的:
drw-rw-r-- 2 unicorn myproject 4096 2012-01-13 06:58 20120113-0658-7704-4676
据我所知,我的应用程序中没有任何原因导致这种情况。
根据附加gdb到进程,调用call umask(0),有效的 umask 是75, 或0o113。
这是gdb会议:
root@1:/opt/myproject# cat ./tmp/pids/unicorn.pid
7600
root@1:/opt/myproject# gdb
GNU gdb (GDB) 7.1-ubuntu
(gdb) attach 7600
Attaching to process 7600
(gdb) call umask(0)
$1 = 75
(gdb) call umask(75)
$2 = 0
(gdb) q
Quit anyway? (y or n) y
Detaching from program: /usr/local/bin/ruby, process 7600
root@1:/opt/myproject# ruby -e 'printf("%o\n", 75)'
113
的 umask113将说明对 的权限664,这似乎是我所看到的。
我在这里做错了什么,是独角兽行为不端吗?暴发户是否忽略了我的节?我应该将节定义为003,不是0003吗?我的gdb会话工作正常吗,%o printf()语法是否正确?