Como fazer uma aplicação rodar automaticamente?

1

Estou tentando executar meu aplicativo quando um usuário faz login. Por isso, adicionei um script em ~/.bash_profile da seguinte maneira:

# for Buluttdepo
/usr/bin/myapp > /dev/null 2>&1 &
export MYAPP_HOME=/opt/myapp

Ele é executado com sucesso, mas devo adicionar o script em .bash_profile ?

Caso contrário, posso adicionar /etc/profile ou adicionar um arquivo de script como /etc/profile.d/myapp_run.sh . Se eu fizer assim, o myapp é executado pelo root. Mas eu não quero correr por raiz. Eu deveria ser executado por qualquer usuário.

Portanto, estou construindo um pacote RPM. Eu quero adicionar o script quando o instalador do pacote RPM é executado. Como o pacote RPM é instalado pela raiz, ele não sabe a qual .bash_profile adicionar, então ele pode adicionar somente a /etc/profile ou /etc/profile.d/ .

  • Qual arquivo devo adicioná-lo?
    • Se o arquivo for ~/bash_profile , como adicionar o script em bash_profile para qualquer usuário por root via rpm ?
    • Se o arquivo for /etc/profile , como qualquer usuário pode executar myapp ?
    • Você pode sugerir uma maneira mais simples de fazer isso?
por Gyhot 30.05.2013 / 10:01

2 respostas

1

Parece que cron resolveria o que você está tentando fazer.

O formato geral de um crontab é semelhante a este, com cada coluna representando o minuto, hora, dia do mês, mês e dia da semana, respectivamente.

30 * * * * /home/user/updates.sh

O Cron também suporta algumas entradas predefinidas, como @weekly , @daily e, entre elas, @reboot .

Você pode editar o crontab enquanto estiver conectado ao usuário do qual deseja executar o script usando crontab -e ou como root crontab -u username -e para editar o crontab de outro usuário.

Depois de abrir o editor, adicione:

@reboot /usr/bin/myapp > /dev/null 2>&1

Na próxima vez que você reinicializar a máquina, /usr/bin/myapp será executado pelo usuário cujo crontab você colocou.

    
por 30.05.2013 / 14:36
0

Um script de instalação de pacotes que toca em arquivos em diretórios pessoais é um não-definitivo. É altamente provável que você interrompa a configuração do usuário, e pode ou não funcionar (e se o usuário tiver zsh ou tcsh como seu shell de login?), E isso se aplica apenas aos usuários cujo diretório inicial está no momento em que o pacote é instalado.

É extremamente estranho executar um aplicativo sempre que um usuário efetua login. Cabe a cada usuário escolher se ele deseja executar seu aplicativo.

Se você precisar executar código quando um usuário fizer login, modificar /etc/profile é sua melhor aposta. Se a sua distribuição tiver um diretório /etc/profile.d , coloque um arquivo lá em vez de modificar /etc/profile . Se você precisar modificar /etc/profile , tenha muito cuidado para não interromper as personalizações do administrador do sistema. Normalmente, tudo o que você faria em profile é definir uma variável de ambiente.

Você afirma que "Se eu fizer assim, o myapp é executado pelo root". Isso é apenas falso: /etc/profile é executado pelo usuário que está efetuando login.

Para reiterar, o que você provavelmente deve fazer é dizer aos usuários “se você quiser executar meu aplicativo, execute o comando myapp ou selecione 'Meu aplicativo' no menu ou clique em ”, nada mais. Certifique-se de fornecer uma entrada de menu para usuários da GUI. Para evitar mexer nas variáveis de ambiente, forneça um script de chamada que defina qualquer variável de ambiente necessária.

    
por 31.05.2013 / 01:49