Início automático do Xorg
Além dos scripts de inicialização no nível do sistema, o ambiente da área de trabalho pode ter sua própria maneira de executar programas automaticamente. A pasta .config/autostart
deve ser uma maneira neutra para a área de trabalho de definir entradas de execução automática. /etc/xdg/autostart
é para configuração em todo o sistema. Detalhes sobre as especificações em http://developer.gnome.org/autostart-spec/ .
Para o LXDE, as entradas de inicialização automática também podem ser definidas ~/.config/lxsession/LXDE/autostart
.
É um pouco diferente se você precisar executar seus scripts depois que a rede estiver em funcionamento. Nesse caso, você deve verificar os scripts especiais pós-conexão que podem ser definidos para o seu gerente de rede. O NetworkManager e o wicd têm suas próprias maneiras de especificar entradas de execução automática pós-conexão. Se a rede estiver configurada via ifupdown
, os scripts de pós-up podem ser colocados na /etc/network/if-up.d/
pasta. Mas uma abordagem melhor para executar scripts pós-conexão pode ser systemd (para sistemas que o suportam, que é a maioria das distribuições modernas).
Iniciar automaticamente como um serviço systemd
Se o que você deseja iniciar automaticamente não é um aplicativo gráfico que requer uma área de trabalho, é melhor evitar o uso de qualquer recurso de inicialização automática fornecido pelo xorg ou pelo seu ambiente de área de trabalho atual.
systemd
tornou-se onipresente em muitas distribuições modernas e oferece muito controle e flexibilidade em termos de como seus serviços são iniciados e como eles são executados.
Resumirei alguns benefícios (o systemd pode fazer muito mais ):
- Executar como root ou como usuário específico: por exemplo
User=myuser
- Reinicie os serviços em caso de falha com tempos limite configuráveis:
Restart=on-failure|on-watchdog|on-abnormal|always
- Definindo o tipo de serviço:
Type=simple|forking|oneshot|notify|dbus
- Estabeleça pré-condições e dependências de inicialização, ou seja, você pode configurar seu serviço para iniciar após a rede estar pronta (
Wants=network-online.target
na [Unit]
seção).
Um serviço de exemplo que inicia um daemon telegram-cli. Coloque-o em /etc/systemd/system/tg.service
.
[Unit]
Description=MyDaemon
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/local/bin/telegram-cli -k /etc/telegram-cli/tg-server.pub -W -P 1234 -d -vvvRC
ExecStop=/usr/bin/pkill -f telegram-cli
User=jicu
[Install]
WantedBy=multi-user.target
Agora você pode ativar o serviço para iniciar automaticamente:
sudo systemctl enable tg
Inicie o serviço:
sudo systemctl start tg
Pare o serviço:
sudo systemctl stop tg
Verifique o status:
systemctl status tg
Desative o serviço:
sudo systemctl disable tg
Para economizar sua digitação extra, você pode adicionar na sua ~/.bashrc
linha alias sc='sudo systemctl $*'
e poderá reduzir os comandos acima para, por exemplo sc start tg
.
NOTA: Se você usou cron
, sabe que as entradas do crontab são executadas em um ambiente restrito - o mesmo se aplica a systemd
: sempre use caminhos absolutos e não faça suposições de nenhuma variável sendo definida. Defina explicitamente quaisquer variáveis das quais seus scripts dependem. systemd
não usará o usuário .bashrc
e $PATH
.
Mais informações: