Avvio automatico delle app xorg
Se lo script che desideri avviare richiede una sessione xorg, potresti provare a seguire le specifiche di avvio automatico di freedesktop che potrebbero funzionare o meno a seconda dell'ambiente desktop che stai utilizzando.
In alternativa, puoi scegliere come target il tuo specifico ambiente desktop come descritto su https://wiki.archlinux.org/index.php/autostarting .
Esecuzione di uno script come servizio systemd
Se il tuo script si adatta alla descrizione di un demone o di un 'servizio' e il tuo sistema sta eseguendo systemd, come nel caso di raspbian e della maggior parte dei moderni, allora puoi configurare il tuo script per essere eseguito come un servizio systemd - questo fornisce un controllo granulare su il ciclo di vita e l'ambiente di esecuzione, nonché i presupposti per (ri) avviare lo script, come ad esempio la rete in esecuzione. È anche possibile configurare il riavvio del servizio in caso di errore ( Restart=always
e ritardo tra il riavvio, ad es RestartSec=10
.).
Per un utilizzo a livello di sistema, creare il proprio file di unità di sistema sotto /etc/systemd/system
, ad esempio con 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
Guarda anche:
Ora siamo pronti per testare il servizio:
systemctl start autossh
Verifica dello stato del servizio:
systemctl status autossh
Interruzione del servizio:
systemctl stop autossh
Dopo aver verificato che il servizio funziona come previsto, abilitarlo con:
systemctl enable autossh
NOTA: per motivi di sicurezza, systemd
lo script verrà eseguito in un ambiente limitato, in modo simile a come crontab
vengono eseguiti gli script, quindi non fare ipotesi sulle variabili di sistema preesistenti. Utilizzare le Environment
chiavi se lo script necessita di variabili specifiche da definire. L'aggiunta set -x
nella parte superiore dello script bash e quindi l'esecuzione systemctl status my_service
potrebbe aiutare a identificare il motivo per cui lo script non riesce. Come regola di tumb, usa sempre percorsi assoluti per tutto ciò che include echo
e cat
, o definisci esplicitamente il tuo $ PATH.
.xinitrc
o al.xsession
file.