我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()
语法是否正确?