¿Cómo ejecutar una aplicación al inicio como un determinado usuario?

¿Cómo ejecutar una aplicación al inicio como un determinado usuario?

¿Hay alguna manera de iniciar una aplicación durante el inicio con una determinada cuenta de usuario?

Por ejemplo, me gustaría ejecutarlo a_small_appcon la cuenta de usuario bob(que está en el grupo bobsgroup). ¿Le agrego algo /etc/init.d?

Nota: No quiero que se inicie la aplicación.después de que un usuario inicia sesiónsino más bien cuando se inicia la computadora.

Respuesta1

Un método independiente del sistema de inicio. Puede usar esto en /etc/rc.localun /etc/init.d/...script, un archivo de configuración Upstart y probablemente también en una configuración systemd.

sudo -u oli /full/path/to/application

Este comando se ejecutará como usuario root y sudose desplegará hasta el usuario "oli". Obviamente cambie el usuario y el comando para sus propósitos.

Debo agregar que hay al menos una docena de maneras de hacer precisamente esto... Pero en mi experiencia, todas tienen efectos prácticamente idénticos. Aquí hay un ejemplo advenedizo usando su setuidestrofa:

start on (filesystem and stopped udevtrigger)
stop on runlevel [06]

setuid oli
respawn

exec /full/path/to/application

Respuesta2

No estoy seguro acerca de las versiones anteriores de Ubuntu, pero las recientes también permiten el uso de @reboot(ver, por ejemploaquí en la Wiki de Ubuntu, desplácese un poco hacia abajo o presione Ctrl+F para llegar a@reiniciar).

Esta podría ser una opción útil cuando desee que un usuario pueda ejecutar sus propios comandos en el momento del arranque sin tener que convertirse en root (o que quien tenga acceso a la cuenta root lo haga por él) o incluso tener que iniciar sesión. . Si funciona, funciona sin iniciar sesión.

Entonces, como "bob", escriba crontab -ey luego agregue una nueva línea en la parte inferior del archivo que se abre, como por ejemplo:

# bottom of bob's crontab
@reboot /path/to/a_small_app

En caso de que no funcione, es posible que desees comprobar las variables de entorno, especialmente PATH. Normalmente configuro HOMEy PATHexplícitamente encima del crontab. Algo como:

# top of bob's crontab
HOME=/home/bob
PATH=/home/bob/.local/bin:/usr/local/bin:/usr/bin:/bin

Una técnica para descubrir por qué podría no estar funcionando:

# bottom of bob's crontab
* * * * * /path/to/a_small_app 2>&1 | tee /tmp/a_small_app.log # will run every minute

... y luego ábrelo /tmp/a_small_app.logen tu editor favorito después de 60 segundos para ver si hay información útil allí.

Al intentar @reboothoy iniciar untmuxsesión dentro de la cual debería vivir el comando a ejecutar, hoy me topé con un script obstinado, que terminó funcionando con este pequeño truco. Mostrándolo en combinación con el registro anterior:

@reboot tmux new-session -d -s mysession "bash -c '/path/to/a_small_app 2>&1 | tee /tmp/a_small_app.log'"

Respuesta3

Parece que la primera respuesta ya no funciona en Ubuntu 14.10.

Así es como lo hago allí (póngalo en /etc/rc.local)

su <username> - -c "<command>"

información relacionada