Risposte:
Metti lo script nella cron
tabella dell'utente appropriato (cioè il crontab ) con un programma di @reboot
.
Un utente può modificare la sua cron
tabella con crontab -e
.
Un esempio che verrà eseguito /path/to/script.sh
all'avvio:
@reboot /path/to/script.sh
Se è necessario eseguirlo come root, non utilizzare @reboot sudo /path/to/script.sh
;
usare sudo crontab -eu root
per modificare il crontab di root.
Vedi anche: crontab (1), cron (8), crontab (8)
Ubuntu 15.04 e successivi per impostazione predefinita utilizzano qualcosa chiamato systemd
, che è un programma (di sorta) che automatizza i servizi e le procedure di avvio. Puoi crearne uno tuo e aggiungerlo all'elenco dei servizi di avvio con solo un piccolo sforzo.
Servizio di base Systemd
Questo è un .service
file barebone che potrebbe essere utilizzato per avviare il mio server Python Gui (potrebbe essere stato uno script di shell, non importa):
[Unit]
Description=Python GUI Server
[Service]
ExecStart=/home/pi/software/GUI_POE.py &
[Install]
WantedBy=multi-user.target
L' Description
opzione è qualsiasi stringa che descriva ciò che il servizio è o fa.
L' ExecStart
opzione specifica il comando da eseguire. Qui, do un percorso a uno script python eseguibile e utilizzo il &
token per eseguirlo in background.
L' WantedBy
opzione specifica la precedenza, in base alla destinazione che desidera utilizzare questo servizio. Se non è necessario che il servizio venga eseguito in un momento specifico, impostarlo su multi-user.target
.
Procedura di base
Scrivi lo script che desideri eseguire all'avvio utilizzando nano
o qualsiasi editor di tua scelta. Assicurati di includere lo shebang corretto nella parte superiore del file ( #!/bin/bash
per gli script bash) e concedi le autorizzazioni eseguibili con chmod
.
Basta scrivere il proprio servizio in un file chiamato my_service.service, quindi copiarlo nella directory corretta con cp my_service.service /lib/systemd/system/
.
Avviare il servizio di: sudo systemctl start my_service.service
. Questo avvia qualunque script tu abbia detto al tuo servizio di eseguire. Lo stesso comando con "stop" anziché start lo disattiverà.
Aggiungi il tuo servizio per il processo di start-up: sudo systemctl enable my_service.service
. Per rimuoverlo, sostituisci semplicemente "abilita" con "disabilita" nello stesso comando.
E questo è tutto! Tieni presente che lo script verrà eseguito automaticamente con i permessi di root, come predefinito nei servizi di sistema.
Il mio esempio semplice (completo)
Per riferimento, ecco un semplice servizio systemd che ho che avvia un semplice server GUI Python usando Dash:
[Unit]
Description=Python GUI Server
After=network-online.target
[Service]
Type=simple
WorkingDirectory=/home/pi/software
ExecStart=/home/pi/software/GUI_POE.py &
Restart=always
RestartSec=15s
KillMode=process
TimeoutSec=infinity
User=pi
Group=pi
[Install]
WantedBy=multi-user.target
Questo servizio di esempio utilizza uno script Python3 ma la formula è la stessa esatta per uno script shell.
Ulteriori letture possono essere trovate in questo eccellente tutorial di DigitalOcean e in questo thread AskUbuntu con un'ottima risposta che mi ha aiutato a imparare systemd. Spero che sia di aiuto!