upstart v1.4
私はアプリケーションサーバを起動するのにunicorn
と呼ばれています。umaskでアップストリーム `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
です。これまでのところ、私は承知していますよう
drw-rw-r-- 2 unicorn myproject 4096 2012-01-13 06:58 20120113-0658-7704-4676
:ユーザー&グループが、私はディレクトリが間違ったアクセス権で作成されていることを観察している
など、そのようなログインnginxのサーバー、アップロード、スタッフなどとして共有されています私のアプリケーションではこれを引き起こすものは何もありません。
プロセスにgdb
を取り付け、そしてcall umask(0)
を呼び出すによると、効果的なumaskが75
、または0o113
です。
ここgdb
セッションです:
[email protected]:/opt/myproject# cat ./tmp/pids/unicorn.pid
7600
[email protected]:/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
[email protected]:/opt/myproject# ruby -e 'printf("%o\n", 75)'
113
113
のumaskのは、私が見ているものをあるように思われ、664
に作られている権限を占めるでしょう。
私はここで間違っていますか?ユニコーンは何が違うのですか?アップスタットは私のスタンを無視していますか?スタンザを0003
ではなく003
と定義しますか?私のgdb
セッションが正常に動作し、%o
printf()
の構文が正しいですか?
実際に問題が起きたのは、Upstartが自動的に設定をリロードしていないということでした。なぜなら、新しく起動されて以来、upstartはconfigファイルを 'HUP'することなく正しく読み込みます。 'strace' tupのおかげで、とても助かりました。 –