Inicialização automática de aplicativos xorg
Se o script que você deseja iniciar exigir uma sessão do xorg, tente seguir a especificação de inicialização automática do freedesktop, que pode ou não funcionar, dependendo do ambiente de área de trabalho que você está usando.
Como alternativa, você pode direcionar seu ambiente de área de trabalho específico, conforme descrito em https://wiki.archlinux.org/index.php/autostarting .
Executando um script como um serviço systemd
Se o seu script se encaixa na descrição de um daemon ou 'serviço', e seu sistema está executando o systemd, que é o caso das versões raspbian e mais modernas, você pode configurar o script para executar como um serviço systemd - isso fornece controle granular sobre o ciclo de vida e o ambiente de execução, bem como as pré-condições para (re) iniciar o script, como a rede em funcionamento. Também é possível configurar a reinicialização do serviço em caso de falha ( Restart=always
e atraso entre a reinicialização, por exemplo RestartSec=10
).
Para uso em todo o sistema, crie seu arquivo de unidade systemd em /etc/systemd/system
, por exemplo, com vim /etc/systemd/system/autossh.service
:
[Unit]
Description=Autossh keepalive daemon
## make sure we only start the service after network is up
Wants=network-online.target
After=network.target
[Service]
## use 'Type=forking' if the service backgrounds itself
## other values are Type=simple (default) and Type=oneshot
Type=forking
## here we can set custom environment variables
Environment=AUTOSSH_GATETIME=0
Environment=AUTOSSH_PORT=0
ExecStart=/usr/local/bin/ssh-keep-alive.sh
ExecStop=/usr/bin/killall -9 autossh
### NOTE: you can have multiple `ExecStop` lines
ExecStop=/usr/bin/killall ssh
# don't use 'nobody' if your script needs to access user files
# (if User is not set the service will run as root)
#User=nobody
# Useful during debugging; remove it once the service is working
StandardOutput=console
[Install]
WantedBy=multi-user.target
Veja também:
Agora estamos prontos para testar o serviço:
systemctl start autossh
Verificando o status do serviço:
systemctl status autossh
Parando o serviço:
systemctl stop autossh
Depois de verificar se o serviço funciona conforme o esperado, ative-o com:
systemctl enable autossh
NOTA: Por motivos de segurança, systemd
o script será executado em um ambiente restrito, semelhante à maneira como os crontab
scripts são executados, portanto, não faça suposições sobre variáveis de sistema preexistentes. Use as Environment
chaves se seu script precisar de variáveis específicas a serem definidas. Adicionar set -x
na parte superior do script bash e depois executar systemctl status my_service
pode ajudar a identificar por que o script está falhando. Como regra geral, sempre use caminhos absolutos para tudo, incluindo echo
e cat
, ou defina explicitamente seu $ PATH.
.xinitrc
ou.xsession
.