
¿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_app
con 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.local
un /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 sudo
se 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 setuid
estrofa:
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 -e
y 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 HOME
y PATH
explí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.log
en tu editor favorito después de 60 segundos para ver si hay información útil allí.
Al intentar @reboot
hoy 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>"