Eseguire una sessione dello schermo all'avvio da rc.local


9

Sto cercando di eseguire una schermata distaccata sotto un utente specifico in rc.local all'avvio. Il codice qui sotto è quello che ho finora, ma non funziona per me. La parte su sembra darmi un errore.

su - username -c /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'

Risposte:


13

Penso che entrambi i -cparametri ( sue bash) dovranno essere quotati al minimo.

su - username -c "/usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'"

Inoltre -dovrebbe essere l'ultimo e potrebbe non essere desiderabile qui (vedi man su).


Qualche altra osservazione. sudo potrebbe essere una scelta migliore per un comando one-shot come il tuo, ma non necessariamente:

sudo -iu username /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'

In particolare, è possibile utilizzare un livello di quotazione in meno con sudo.

Un'altra cosa con cui devi stare attento è l'esecuzione di comandi senza percorso assoluto in un contesto privilegiato. Questo vale per su(o sudo) ma anche per il percorso bashnel tuo comando. Lo stai facendo bene con screen.

Ho appena testato quanto segue e funziona bene. Penso che -sia il problema principale nella tua linea originale:

/bin/su username -c "/usr/bin/screen -dmS test bash -c '/home/username/test.sh; exec bash'"

Osservazione malvagia: perché non tmuxprovi? Di recente sono passato e non ho mai guardato indietro. L'unica cosa che avevo bisogno di cambiare subito è stata la combinazione di tasti prefisso che in tmuxdefault Ctrl+ B- torna a GNU screen's Ctrl+ A.

Permette di dividere la finestra in un numero quasi arbitrario di riquadri (in verticale e in orizzontale) e il suo formato di file di configurazione (incluso quello per lo status par) è in realtà intelligibile per l'uomo. Ovviamente tmuxè buono come screenquando vuoi semplicemente eseguire un programma / script non originariamente scritto come daemon in background. Se si intende interagire con il multiplexer terminale, tuttavia, lo consiglio vivamente tmux.


Lo proverò tra pochi. Lo script che sto eseguendo utilizza percorsi assoluti, quindi consiglieresti suo sudo?
ATLChris,

1
sudonon è una buona scelta se eseguito da rc.local in cui sei già root, poiché perderai una shell di login. In una nota a margine, dai un'occhiata a /etc/init/tty1.conf- sostituisci [a] getty con lo schermo qui.
aquaherd,

@aquaherd: è quello che avevo in mente quando ho scritto ma non necessariamente . L'indizio, davvero, è nel solito sudo su -... sudo(superutente do), su(cambia utente) ... buona idea su .conf
0xC0000022L

1
Devo dire che sto facendo +1 su questo post solo per la tua malvagia osservazione. Lo adoro! È un ottimo sostituto dello schermo, dal momento che uno può costringerlo ad iniziare una nuova sessione.
Il fisico quantistico

@aquaherd sudopuò avviare bene una shell di accesso usando -i.
Muru,


1

Ecco quello che ho usato l'ho trovato il più pulito e semplice (testato lavorando da solo):

Sostituisci "utente" con l'utente per eseguirlo come. Sostituisci "nameyouchoose" come nome della sessione dello schermo Sostituisci "/script/start.bash" nel percorso dello script.

/usr/bin/sudo -u user /usr/bin/screen -dmS nameyouchoose /script/start.bash

Fonte: http://realtechtalk.com/How_to_start_screen_in_bash_script_or_from_etcrclocal_on_startup_as_a_specific_user-1980-articles

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.