Frage

Ich benutze upstart v1.4 Um meinen Anwendungsserver zu starten, heißt es unicorn.

Das upstart Die Konfigurationsdatei sieht Folgendes aus:

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

Es ist unerlässlich, dass der Prozess mit läuft 0774, das ist ug+rwxo+r, zumindest für Verzeichnisse. Benutzer und Gruppe werden als solcher als NGINX -Server, Uploads, Mitarbeiter anmelden usw. freigegeben.

Ich habe festgestellt, dass die Verzeichnisse mit den falschen Berechtigungen erstellt werden:

drw-rw-r-- 2 unicorn       myproject        4096 2012-01-13 06:58 20120113-0658-7704-4676

Soweit ich weiß, verursacht nichts in meiner Bewerbung dies.

Nach Anbringen gdb zum Prozess und anrufen call umask(0), die effektive Ummaske ist 75, oder 0o113.

Hier ist die gdb Sitzung:

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

Die Ummask von 113 würde die Berechtigungen berücksichtigen, die erteilt werden 664, was scheint das zu sein, was ich sehe.

Was mache ich hier falsch? Ignoriert UPStart meine Strophe? Soll ich die Strophe als definieren als 003, nicht 0003? Ist mein gdb Sitzungsarbeit und %o printf() Syntax richtig?

War es hilfreich?

Lösung

Wie versteckt sich "Einhorn" außerhalb einer Umgebung? Ich würde genau das gleiche erraten, aber bitte überprüfen Sie dies (halten Sie alles so einfach wie möglich).

Denken Sie daran, dass ein Ummask -Wert nicht absolut ist: Wie der Name schon sagt, ist es eine Maske - er "subtrahiert" Berechtigungsbits Aus den Berechtigungsbits gibt Ihre Anwendung an, wann sie eine Datei öffnet oder ein Verzeichnis erstellt. UPStarts Umask Strophe verhalten sich aus dem, was ich sehen kann, sodass Ihr Problem mit dieser Unicorn -Anwendung angegeben ist, in der Sie angeben, was für Sie eine seltsame Anzahl von Berechtigungsbits (Modus) ist, wenn sie Dateien zum Schreiben öffnen und Verzeichnisse erstellen.

Versuchen Sie, das Einhorn zu beschichten, um zu sehen, was es tatsächlich tut:

  strace -o /tmp/strace.log -fFv -s 1024 /opt/myproject/bin/unicorn --config-file ...

Nachdem Unicorn gewartet hatte, um einige Dateien und/oder Verzeichnisse zu erstellen, stoppen/töten Sie es und sehen Sie sich die Datei an /tmp/strace.log. GREP für "Öffnen (Datei)", wobei die Datei der Name einer der Dateien ist, die zum Beispiel erstellt wird, und sehen Sie, wie das 3. Argument für den Aufruf offener System ist. Wenn Sie diesen Moduswert haben, sollte es möglich sein, einen Ummask -Wert zu erstellen, um die gewünschten Dateiberechtigungen zu geben. Beachten Sie, dass dies dieses Einhorn annimmt:

  • stimmt mit dem angegebenen Modus überein.
  • Ruft Umask nicht an (2) selbst (was die UPStart -Umask -Strophe außer Kraft setzen würde).
  • Ruft CHMOD (2)/FCHMOD (2) nicht an.

Wenn - nach dem Befolgen des oben genannten Vorgangs - glauben Sie immer noch, dass es ein Problem mit dem Upstart gibt, geben Sie bitte einen einfachen Testfall an (für das kein Einhorn erforderlich ist) und erhöhen Sie hier einen Fehler: https://bugs.launchpad.net/upstart/+Filebug.

Andere Tipps

Wenn Sie Unicorn von der Execa Stanza anrufen, rufen Sie ein Skript an, das nur "Ummask >> /tmp /seltsfile" aufruft, was bringt es dort ein? Wenn dies die erwartete Antwort gibt, liegt Ihr Problem im Einhorn.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top