Ejecute una sesión de pantalla en el arranque desde rc.local

9

Estoy tratando de ejecutar una pantalla separada bajo un usuario específico en rc.local en el arranque. El código a continuación es lo que tengo hasta ahora, pero no me funciona. La parte su parece estar dándome un error.

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

Respuestas:

13

Creo que ambos -cparámetros ( suy bash) tendrán que ser citados como mínimo.

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

También -se espera que sea el último y puede no ser deseable aquí (ver man su).


Algunas observaciones más. sudo podría ser una mejor opción para un comando de un solo disparo como el suyo, pero no necesariamente:

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

En particular, puede usar un nivel menos de cita con sudo.

Otra cosa con la que debe tener cuidado es ejecutar comandos sin ruta absoluta en un contexto privilegiado. Esto es válido para su(o sudo) pero también para la ruta a bashen su comando. Lo estás haciendo bien con screen.

Acabo de probar lo siguiente y funciona bien. Creo que este -es el problema principal en su línea original:

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

Mal comentario: ¿por qué no lo tmuxintentas? Recientemente me cambié y nunca miré hacia atrás. Lo único que necesitaba cambiar de inmediato era la combinación de teclas de prefijo que por tmuxdefecto es Ctrl+ B- de nuevo a GNU screen's Ctrl+ A.

Permite dividir su ventana en un número casi arbitrario de paneles (vertical y horizontalmente) y su formato de archivo de configuración (incluido el del par de estado) es realmente inteligible para los humanos. Por supuesto, tmuxes tan bueno como screencuando simplemente desea ejecutar algún programa / script que no se escribió originalmente como daemon en segundo plano. Sin embargo, si tiene la intención de interactuar con el multiplexor terminal, lo recomiendo encarecidamente tmux.

0xC0000022L
fuente
Voy a intentar esto en unos pocos. El script que estoy ejecutando usa rutas absolutas, ¿recomendaría suo sudo?
ATLChris
1
sudono es una buena opción si se ejecuta desde rc.local donde ya es root, ya que perderá un shell de inicio de sesión. En una nota al margen, eche un vistazo a /etc/init/tty1.conf- reemplace [a] getty con la pantalla aquí.
aquaherd
@aquaherd: es lo que tenía en mente cuando escribí, pero no necesariamente . La pista, en realidad, está en lo habitual sudo su -... sudo(superusuario), su(cambiar de usuario) ... buena idea sobre el .conf
0xC0000022L
1
Tengo que decir que estoy haciendo +1 en esta publicación solo por tu comentario malvado. ¡Me encanta! Es un gran reemplazo para la pantalla, ya que uno puede forzarlo a comenzar una nueva sesión.
El físico cuántico
@aquaherd sudopuede iniciar un shell de inicio de sesión muy bien usando -i.
Muru
1

Probar en sudo -u usernamelugar desu - username

profecía201
fuente
1

Esto es lo que usé. Me pareció que era el más limpio y simple (probé trabajando yo mismo):

Reemplace "usuario" con el usuario para ejecutarlo como. Reemplace "nameyouchoose" como el nombre de la sesión de pantalla Reemplace "/script/start.bash" en la ruta de su script.

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

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

Areeb Soo Yasir
fuente