2013-04-03 15 views
8

Ho alcuni processi che parlano tra loro attraverso pipe denominate. Attualmente sto creando tutti i miei pipe localmente e mantenendo le applicazioni nella stessa directory di lavoro. Ad un certo punto, si presume che questi programmi possano (e verranno) eseguiti da diverse directory. Ho bisogno di creare questi tubi che sto usando in una posizione nota, quindi tutte le diverse applicazioni saranno in grado di trovare i tubi di cui hanno bisogno.Qual è il posto giusto dove inserire named pipe su Linux?

Sono nuovo a lavorare su Linux e non ho familiarità con la struttura del filesystem. In Windows, userei qualcosa come la cartella AppData per mantenere questi tubi. Non sono sicuro di quale sia l'equivalente in Linux.

La directory /tmp sembra che probabilmente potrebbe funzionare correttamente. Ho letto in alcuni punti che è stato risolto durante gli arresti di sistema (e va bene, probabilmente non ho ricreato i pipe quando avviò il backup.) Ma ho visto alcune altre persone dire che stanno perdendo file mentre il sistema è attivo, come se fosse pulito periodicamente, cosa che non voglio succedere mentre le mie applicazioni usano quei tubi!

C'è un posto più adatto per negozi specifici di applicazioni? O sarebbe /tmp essere il posto che vorrei mantenere questi (dal momento che sono dopotutto, temporaneo.)?

risposta

7

Ho visto SaltStack utilizzando /var/run. L'unico problema è che è necessario l'accesso root per scrivere in quella directory, ma supponiamo che tu stia eseguendo il tuo processo come un demone di sistema. SaltStack crea /var/run/salt al momento dell'installazione e cambia il proprietario in salt in modo che in seguito possa essere utilizzato senza privilegi di root.

Ho anche controllato il Filesystem Hierarchy Standard e anche se non è molto importante così tanto, anche loro dicono: programmi

sistema che mantengono socket del dominio UNIX transitori li devono porre in questa directory.

Poiché le pipe denominate sono qualcosa di molto simile, farei lo stesso.

+0

Mi scuso per non aver visto prima la tua risposta, ma questo è esattamente il tipo di risposta che stavo cercando. Non ero a conoscenza del '[Filesystem Hierarchy Standard] (http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard#Directory_structure)', e apparentemente questo ha un sacco di informazioni utili per uno sviluppatore Linux alle prime armi come me. Oltre a '/ var/run', sembra che'/var/tmp' sia accettabile anche per il mio caso d'uso, dal momento che conserva anche quelli attraverso i reboot. Ancora una volta, grazie mille! – nitz

+0

Contento di aver aiutato ;-) – tchap

3

Su più recenti distribuzioni Linux con systemd /run/user/<userid> (creato da pam_systemd durante il login, se non è già presente) può essere utilizzato per l'apertura socket e caricamento dei file .pid lì, invece di /var/run dove solo root ha accesso. Si noti inoltre che /var/run è un collegamento simbolico a /run, pertanto è possibile utilizzare anche /var/run/user/<userid>. Per maggiori informazioni controlla this thread. L'idea è che i demoni di sistema debbano avere una directory /var/run/<daemon name>/ creata durante l'installazione con le autorizzazioni appropriate e inserire i loro file socket/pid mentre i daemon eseguiti dall'utente (come ad esempio pulseaudio) dovrebbero usare /run/user/<userid>/. Un'altra opzione è /tmp e /var/tmp.

Problemi correlati