Ho creato uno script in /etc/init.d/ che deve eseguire diversi altri script da altri utenti (con privilegi non root) dalle loro directory home, come se li avessero avviati.
Lancio questi script con: sudo -b -u <username> <script_of_a_particular_user>
E funziona Ma per ogni script utente che continua a essere eseguito (ad esempio un po 'di watchdog) vedo un processo sudo parent corrispondente, ancora attivo e in esecuzione come root. Questo crea un pasticcio nell'elenco dei processi attivi.
Quindi la mia domanda è: come posso avviare (fork) un altro script dallo script bash esistente come un altro utente e lasciarlo come un processo orfano (autonomo)?
Spiegazione più dettagliata:
fondamentalmente sto cercando di fornire ad altri utenti sulla macchina un mezzo per eseguire roba all'avvio o allo spegnimento del sistema eseguendo i file eseguibili trovati nelle rispettive sottodirectory presenti nella loro directory home, denominati .startUp e .shutDown. Dato che non ho trovato nessun altro modo per farlo, ho scritto il mio script bash che fa esattamente questo e l'ho configurato come script di servizio (seguendo l'esempio di scheletro) in /etc/init.d/, quindi quando viene eseguito con l'argomento start lancia tutto dalle directory .startUp e quando viene eseguito con l'argomento stop avvia tutto dalle directory .shutDown di tutti gli utenti come loro.
In alternativa, sono anche interessato a utilizzare una soluzione esistente per risolvere questo problema.
AGGIORNAMENTO
Mi sono guardato un po 'in giro e ho trovato questa domanda:
/unix/22478/detach-a-daemon-using-sudo
Risposta accettata lì, per usare:, sudo -u user sh -c "daemon & disown %1"
funziona per me. Ma ho anche provato senza rinnegare% 1 ed è lo stesso. Quindi questo è ciò che funziona per me come mi aspettavo:
sudo -u <username> bash -c "<script_of_a_particular_user> &"
La mia domanda aggiuntiva ora è: perché funziona senza rinnegare? dovrei comunque lasciare la chiamata di disconoscimento , a prescindere, per qualche potenziale caso speciale?
AGGIORNAMENTO 2
Apparentemente funziona anche questo:
su <username> -c "<script_of_a_particular_user> &"
C'è qualche differenza tra questa chiamata e la chiamata sudo? So che questa è potenzialmente una domanda completamente diversa. Ma dal momento che sto trovando le risposte qui da solo forse per il bene di questo argomento qualcuno potrebbe chiarire questo qui.
AGGIORNAMENTO 3
Entrambi questi metodi con su o sudo ora producono un nuovo processo startpar (processo singolo che viene eseguito come root) dopo l'avvio della macchina. Visibile nell'elenco dei processi come:
startpar -f -- <name_of_my_init.d_script>
Perché viene generato questo processo? Ovviamente sto facendo qualcosa di sbagliato dal momento che nessun altro script init.d ha questo processo in esecuzione.
AGGIORNAMENTO 4
Il problema con startpar è stato risolto. Ho iniziato un'altra domanda per questo: il
processo startpar è rimasto sospeso all'avvio dei processi da rc.local o init.d
E un'altra domanda per discutere ulteriormente i meccanismi di lancio per utenti non privilegiati:
fornire agli utenti normali (non root) le funzionalità di inizializzazione e spegnimento automatico