
Existe uma maneira de iniciar um aplicativo durante a inicialização com uma determinada conta de usuário?
Por exemplo, eu gostaria de ter a_small_app
executado na conta do usuário bob
(que está no grupo bobsgroup
). Acrescento algo /etc/init.d
?
Nota: não quero que o aplicativo seja iniciadodepois que um usuário faz loginmas sim quando o computador é iniciado.
Responder1
Um método agnóstico de sistema de inicialização. Você pode usar isso em /etc/rc.local
um /etc/init.d/...
script, um arquivo de configuração do Upstart e provavelmente também em uma configuração do systemd.
sudo -u oli /full/path/to/application
Este comando será executado como usuário root e sudo
cairá para o usuário "oli". Obviamente, altere o usuário e o comando para seus propósitos.
Devo acrescentar que há pelo menos uma dúzia de maneiras de fazer exatamente isso... Mas, na minha experiência, todos têm efeitos praticamente idênticos. Aqui está um exemplo inicial usando sua setuid
estrofe:
start on (filesystem and stopped udevtrigger)
stop on runlevel [06]
setuid oli
respawn
exec /full/path/to/application
Responder2
Não tenho certeza sobre versões mais antigas do Ubuntu, mas as recentes também permitem o uso de @reboot
(veja, por exemplo,aqui no Ubuntu Wiki, role um pouco para baixo ou Ctrl+F até@reinício).
Esta pode ser uma escolha útil para quando você deseja que um usuário seja capaz de executar seus próprios comandos no momento da inicialização sem ter que se tornar root (ou ter que quem tem acesso à conta root faça isso por ele) ou mesmo ter que fazer login . Se funcionar, funciona sem fazer login.
Então, como "bob", digite crontab -e
e adicione uma nova linha na parte inferior do arquivo que é aberto, como:
# bottom of bob's crontab
@reboot /path/to/a_small_app
Caso não funcione, você pode querer verificar suas variáveis de ambiente, especialmente PATH
. Normalmente defino HOME
e PATH
explicitamente sobre o crontab. Algo como:
# top of bob's crontab
HOME=/home/bob
PATH=/home/bob/.local/bin:/usr/local/bin:/usr/bin:/bin
Uma técnica para descobrir por que pode não estar funcionando:
# bottom of bob's crontab
* * * * * /path/to/a_small_app 2>&1 | tee /tmp/a_small_app.log # will run every minute
... e abra /tmp/a_small_app.log
em seu editor favorito após 60 segundos para ver se há alguma informação útil nele.
Ao tentar @reboot
hoje iniciar umtmuxsessão dentro da qual o comando a ser executado deve residir, hoje me deparei com um script teimoso, que acabou funcionando com esse pequeno truque. Mostrando isso em combinação com o registro acima:
@reboot tmux new-session -d -s mysession "bash -c '/path/to/a_small_app 2>&1 | tee /tmp/a_small_app.log'"
Responder3
Parece que a primeira resposta não funciona mais no Ubuntu 14.10.
É assim que eu faço lá (coloque em /etc/rc.local)
su <username> - -c "<command>"