Qualcosa come Cron?
Nota il @reboot
ingresso
Questo è l'approccio più flessibile e quello più simile alle "Attività pianificate" di Windows (meglio in realtà).
Avvio automatico di Xorg
Oltre agli script di avvio a livello di sistema, il tuo ambiente desktop potrebbe avere il proprio modo di eseguire automaticamente i programmi. La cartella .config/autostart
dovrebbe essere un modo indipendente dal desktop per definire le voci di esecuzione automatica. /etc/xdg/autostart
è per la configurazione a livello di sistema. Dettagli sulle specifiche su http://developer.gnome.org/autostart-spec/.
Per LXDE le voci di avvio automatico possono anche essere impostate in ~/.config/lxsession/LXDE/autostart
.
È un po' diverso se devi eseguire i tuoi script dopo la rete è attiva e funzionante. In tal caso dovresti controllare gli speciali script post-connessione che possono essere definiti per il tuo gestore di rete. Entrambi NetworkManager e wicd hanno i propri modi per specificare le voci di esecuzione automatica post-connessione. Se la rete è configurata tramite ifupdown
, quindi gli script post-up possono essere inseriti nel /etc/network/if-up.d/
cartella. Ma un approccio migliore all'esecuzione di script post-connessione potrebbe essere systemd (per i sistemi che lo supportano, che è la maggior parte delle distribuzioni moderne).
Avvio automatico come servizio systemd
Se la cosa che desideri avviare automaticamente non è un'app grafica che richiede un desktop, allora è meglio evitare di utilizzare le funzionalità di avvio automatico fornite da xorg o dal tuo attuale ambiente desktop.
systemd
è diventato onnipresente in molte distribuzioni moderne e offre molto controllo e flessibilità in termini di come i tuoi servizi vengono avviati e come vengono eseguiti.
Riassumerò alcuni vantaggi (systemd può fare molto di più ):
- Esegui come root o come utente specifico:ad es.
User=myuser
- Riavvia i servizi in caso di errore con timeout configurabili:
Restart=on-failure|on-watchdog|on-abnormal|always
- Impostazione del tipo di servizio:
Type=simple|forking|oneshot|notify|dbus
- Stabilisci le precondizioni e le dipendenze di avvio, ovvero puoi impostare il tuo servizio in modo che si avvii dopo che la rete è attiva (
Wants=network-online.target
nel[Unit]
sezione).
Un servizio di esempio che avvia un demone telegram-cli. Inseriscilo in /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
Ora puoi abilitare l'avvio automatico del servizio:
sudo systemctl enable tg
Avvia il servizio:
sudo systemctl start tg
Arresta il servizio:
sudo systemctl stop tg
Controlla lo stato:
systemctl status tg
Disattiva il servizio:
sudo systemctl disable tg
Per risparmiare ulteriore digitazione puoi aggiungere il tuo ~/.bashrc
la riga alias sc='sudo systemctl $*'
quindi sarai in grado di abbreviare i comandi sopra ad es. sc start tg
.
Ulteriori informazioni:
- Capire systemd
- servizi systemd
- unità di sistema
Sì, è possibile eseguire programmi all'avvio su Linux definendo i percorsi degli eseguibili in rc.local
che risiede nel /etc
o /etc/rc.d
directory, ad esempio:
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
/path/to/executable
Nota:non dimenticare di assegnare i diritti eseguibili come descritto nella documentazione del file, ovvero Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure that this script will be executed during boot.