Como executar um aplicativo na inicialização como um determinado usuário?

Como executar um aplicativo na inicialização como um determinado usuário?

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_appexecutado 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.localum /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 sudocairá 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 setuidestrofe:

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 -ee 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 HOMEe PATHexplicitamente 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.logem seu editor favorito após 60 segundos para ver se há alguma informação útil nele.

Ao tentar @reboothoje 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>"

informação relacionada