Domanda

sto usando upstart v1.4 Per avviare il mio server delle applicazioni, si chiama unicorn.

Il upstart Il file di configurazione sembra questo:

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

È essenziale che il processo sia eseguito 0774, questo è ug+rwxo+r, almeno per le directory. Utente e gruppo sono condivisi come come il server Nginx, i caricamenti, l'accesso del personale, ecc.

Ho osservato che le directory sono create con le autorizzazioni errate:

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

Per quanto ne so, nulla nella mia applicazione lo sta causando.

Secondo l'attacco gdb al processo e alla chiamata call umask(0), l'efficace Umask è 75, o 0o113.

Ecco il gdb sessione:

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

La Umask di 113 spiegherebbe le autorizzazioni. 664, che sembra essere quello che sto vedendo.

Cosa sto facendo di sbagliato qui, è un comportamento maltrattamento unicorno? Upstart sta ignorando la mia strofa? Dovrei definire la strofa come 003, non 0003? È il mio gdb lavoro di sessione e %o printf() sintassi corretta?

È stato utile?

Soluzione

In che modo "unicorno" si comporta al di fuori di un ambiente di partenza? Immagino esattamente lo stesso, ma per favore controlla questo (mantieni tutto il più semplice possibile).

Ricorda che un valore di Umask non è un assoluto: come suggerisce il nome, è una maschera: "sottrae" i bit di autorizzazione Dai bit di autorizzazione l'applicazione specifica quando apre un file o crea una directory. Upsarts Umask Strofe si sta comportando da ciò che posso vedere, quindi il tuo problema deve essere con questa applicazione unicorna che specifica ciò che è per te uno strano set di bit di autorizzazione (modalità) quando apre i file per la scrittura e crea directory.

Prova a Stracing Unicorn per vedere cosa sta effettivamente facendo:

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

Avendo aspettato che gli unicorni creino alcuni file e/o directory, fermarlo/uccidere e guardare il file /tmp/strace.log. Grep per "Open (File)" in cui il file è il nome di uno dei file che crea ad esempio e vedere quale è il terzo argomento per la chiamata di sistema aperto. Quando hai quel valore di modalità, dovrebbe essere possibile costruire un valore Umask per fornire le autorizzazioni del file desiderate. Si noti che ciò presuppone che unicorno:

  • è coerente con la modalità che specifica.
  • non chiama Umask (2) si (che sovrascriverebbe la strofa Umask upstart).
  • non chiama chmod (2)/fchmod (2).

Se - dopo aver seguito il processo sopra - pensi ancora che ci sia un problema con UPSTART, si prega di fornire un semplice caso di test (che non richiede unicorno) e solleva un bug qui: https://bugs.launchpad.net/upstart/+filebug.

Altri suggerimenti

Se invece di chiamare unicorno dalla strofa del dirigente chiama uno script che chiama semplicemente "Umask >> /TMP /Somefile" Cosa ci mette? Se ciò dà la risposta prevista, il tuo problema è nell'unicorno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top