Creo que ambos -c
parámetros ( su
y 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 bash
en 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 tmux
intentas? 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 tmux
defecto 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, tmux
es tan bueno como screen
cuando 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
.
su
osudo
?sudo
no 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í.sudo su -
...sudo
(superusuario),su
(cambiar de usuario) ... buena idea sobre el .confsudo
puede iniciar un shell de inicio de sesión muy bien usando-i
.Probar en
sudo -u username
lugar desu - username
fuente
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.
Fuente: http://realtechtalk.com/How_to_start_screen_in_bash_script_or_from_etcrclocal_on_startup_as_a_specific_user-1980-articles
fuente