Sto scrivendo un processo daemon per un sistema Debian C
che utilizza un socket di dominio Unix .
Se la directory di lavoro del processo daemon è la directory principale, esiste una directory idiomatica per posizionare il socket sul file system?
Sto scrivendo un processo daemon per un sistema Debian C
che utilizza un socket di dominio Unix .
Se la directory di lavoro del processo daemon è la directory principale, esiste una directory idiomatica per posizionare il socket sul file system?
Risposte:
Si trovano comunemente in /tmp
una sua sottodirectory. Si noti che tutto in /tmp
è soggetto a cancellazione all'arresto - non che sia necessariamente cancellato, basta fare attenzione a ciò che può essere , quindi se lo si utilizza, verificare se è necessario creare la propria sottodirectory ogni volta. Ti consigliamo di utilizzare una sottodirectory se desideri limitare l'accesso tramite autorizzazioni, poiché /tmp
è leggibile da tutti.
/run
e /var/run
(che possono essere collegati in modo simbolico insieme) sono usati in modo simile, ma sono generalmente montati come filesystem tmpfs - il che significa che sono creati all'avvio e risiedono in memoria , non su disco (quindi non usarlo come posto per il dump abbondanti quantità di dati). Per un socket di runtime, è probabilmente una buona scelta.
Si noti che /run
, e tutte le altre directory menzionate qui tranne /tmp
, sono scrivibili solo da root. Per un processo di sistema, questo va bene, ma se l'applicazione può essere eseguita da un utente non privilegiato, si desidera utilizzare /tmp
o creare una directory permanente da qualche parte e impostare autorizzazioni su tale, oppure utilizzare una posizione nella $ HOME dell'utente.
È possibile creare una directory in /usr/share
(o /usr/local/share
) durante l'installazione. Directory e contenuti non sono potenzialmente raccolti negli stivali come sarebbero in /tmp
o /run
. Tuttavia, come sottolinea jordanm nei commenti, /usr
può essere montato in sola lettura e le linee guida della gerarchia del filesystem linux riflettono questo . Ovviamente, non può essere di sola lettura quando l'applicazione è installata, quindi se ti senti a tuo agio a creare un socket lì, puoi lasciarlo e usarlo in seguito (sarai comunque in grado di scrivere sul socket anche se il il file è di sola lettura).
Se vuoi un posto persistente su tutti gli stivali che non verrà montato in sola lettura, /etc
è una scommessa abbastanza sicura, poiché viene spesso utilizzata per configurazioni e riconfigurazioni a livello di sistema. OTOH, è possibile avere sistemi in cui il dispositivo alla base dell'intero filesystem di root è di sola lettura (ad esempio, sistemi integrati), con / tmp e / eseguito su un altro dispositivo (probabilmente: tmpfs in memoria). Quindi le due strategie più solide sembrano essere:
Installare il socket in una posizione permanente quando l'applicazione è installata.
Creare una directory in /run
o /var/run
in fase di esecuzione e inserire lì il socket.
Fai la stessa cosa solo in /tmp
.
Il vantaggio del primo è che non importa cosa, una volta installata l'app, avrai un socket da usare. Il vantaggio del secondo è che può essere più favorevole alla programmazione sana. Il vantaggio del terzo è che non richiede i privilegi di superutente. Dovrebbe essere facile passare da un'implementazione all'altra se cambi idea in seguito.
Infine, quando BatchyX ha presentato, dovresti almeno offrire un'opzione di configurazione per questo, ricadendo sulla tua scelta di default.
/run
o /var/run
viene spesso utilizzato anche per i processi di root.
/tmp
. Lo modificherò in.
/usr
può essere montato in sola lettura. I file non dovrebbero mai essere creati lì in fase di esecuzione. Gli altri suggerimenti sono buoni.
/tmp/.APPNAME/.APPSOCK
perché il demone non ha bisogno di dati persistenti.
/tmp
e /run
è che solo root ha le autorizzazioni di scrittura /run
.