Come aggiungere uno script all'avvio e all'arresto in debian?


12

il titolo lo riassume praticamente.

come faccio ad aggiungere startup.sh e shutdown.sh della mia app server alla sequenza di avvio e spegnimento del sistema operativo Debian?

Risposte:


15

Su Debian, dovrebbero essere inseriti gli script di avvio e arresto del servizio e delle applicazioni /etc/init.d/.

Debian fornisce uno script di esempio /etc/init.d/skeletonche puoi modificare secondo i tuoi gusti per la tua specifica applicazione.

Una volta installato, chiama:

# update-rc.d YOURAPP defaults

Per avere Debian aggiungere i /etc/rc?.d/collegamenti simbolici per te.

Se preferisci un menu o un'interfaccia grafica, dai un'occhiata al pacchetto sysv-rc-confo ksysv.


4

Puoi chiamare il tuo script da /etc/rc.local , prima della riga che dice exit 0

Per quanto riguarda lo spegnimento della tua app, suggerirei di inserire uno script in /etc/rc0.d . Devi nominarlo con una K maiuscola , quindi un numero di 2 cifre che specifica l'ordine in cui vengono eseguiti questi script, quindi un nome. Verrà chiamato con un parametro "stop", ma puoi ignorarlo per un semplice script stop.


Perché dovresti andare in giro con rc.local quando devi già giocherellare con /etc/rcX.d?
womble

rc.local è il posto giusto per semplici cose di avvio - non è necessario occuparsi dei parametri di avvio / arresto, ecc. Ma non ha la capacità di arrestare un processo. La roba rc0.d è un po 'un trucco.
Brent,

3

Per l'avvio dare un'occhiata a questo .

Per lo spegnimento, crea un collegamento / copia il tuo script in una delle cartelle /etc/rcX.d dove X è il runlevel in cui vuoi che venga eseguito. 0 è il runlevel di spegnimento per Debian credo.


Queste sono le informazioni di spegnimento di cui avevo bisogno. Grazie per questo, @squillman.
Harperville,

1

Il più semplice è modificare gli script esistenti, funziona nel mio sistema, utilizzato per i suoni :)

  • avvio, modifica /etc/init.d/rc.local, aggiungi il tuo sh alla fine del file, prima di: (lo eseguirà subito prima della "schermata" di accesso)
  • spegnimento, modifica /etc/init.d/halt, aggiungi il tuo sh all'inizio del file, subito dopo i commenti iniziali (verrà eseguito prima dell'effettivo comando di arresto, che viene chiamato da questo file di script
  • riavvio, come arresto, ma in /etc/init.d/reboot

1

Da Debian Jessie, il vecchio initprogramma è stato sostituito da systemd!

Dai un'occhiata tu stesso. Esegui: ls -l /sbin/inite vedi cosa sta puntando. In questi giorni indica systemd( /sbin/init -> /lib/systemd/systemd), un programma di inizializzazione più recente e migliore.


QUI I SCELTI E LE ALTRE RISPOSTE QUI SONO ORA AGGIORNATI !!!


* Sebbene sia ancora possibile installare gli script alla vecchia maniera con gli strumenti di System-V, non è una buona idea in generale.

man systemd.service dice: *

Se viene richiesto un servizio con un determinato nome ma non viene trovato alcun file di configurazione dell'unità, systemd cerca uno script init SysV con lo stesso nome ... e crea dinamicamente un'unità di servizio da quello script. Questo è utile per la compatibilità con SysV. Si noti che questa compatibilità è abbastanza completa ma non al 100%.


Per i nuovi sistemi Debian (ad esempio Jessie, Stretch, Buster, ecc ...)

È più facile di quanto pensi. (-:

Ecco il metodo nuovo e preferito per installare i programmi di avvio o arresto.

Con systemdte prima vuoi creare un file unitario . Un file di unità è principalmente dichiarazioni, non codice.

Quindi utilizzerai il systemctlcomando per abilitare o avviare quell'unità.

systemdfa gran parte del lavoro per te, facilitando, ad esempio, il riavvio automatico di un programma critico in caso di arresto anomalo o altrimenti ucciso. Inoltre, arresta il programma dove e quando dovrebbe per impostazione predefinita senza alcun lavoro aggiuntivo da parte tua.


Inizia a conoscere systemdqui:

Da Debian e altrove e ecc e ecc .


Pagine man con cui iniziare:

man systemd.unit - Informazioni sui file di unità in generale
man systemd.service - Informazioni sui file di unità di servizio, ad es. Daemon e programmi a esecuzione singola.

man systemctl - Interfaccia utente della riga di comando
man journalctl- Visualizza il registro di ciò che ha fatto systemd

man systemd - Informazioni sul programma init stesso


Esistono anche altri tipi di file di unità, ad es

man systemd.target - per gruppi e target sincronizzati comuni.

Dopo aver digerito le basi di cui sopra, quindi scavare con man -k systemdper trovare altre pagine man correlate.



Qualunque cosa tu faccia, su Debian non usi nessuno di questi :

  • update-rc.d --installare e rimuovere i collegamenti agli script di init in stile System-V
  • sysv-rc-conf - Configurazione a livello di esecuzione per SysV come collegamenti di script init
  • runlevel - Stampa il runlevel SysV precedente e corrente
  • BUM- B oot U p M anager - un editor grafico di runlevel
  • systemadm- Frontend grafico per il sistema systemd e il gestore dei servizi
    (a proposito, l'autore mi ha detto via e-mail che adesso è troppo rotto.)


UN ESEMPIO:

Questo file di unità avvia il demone NoIP.com all'avvio e lo spegne quando mi chiudo.

Questo demone, di tanto in tanto, manda il mio indirizzo IP corrente per aggiornare il mio DDNS ( D inamico DNS ( D OMain N ome S erver)) base di dati del fornitore, in modo da mantenere il mio nome di dominio che punta al mio computer, ovunque, a.

I file di questa unità si trovano sul mio sistema in questo file di impostazioni: /etc/systemd/system/noip2.service

Ecco cosa c'è nel file dell'unità:

#   Comments can only go at the beginning of the line!

[Unit]
Description=Start the NoIP IP update daemon.  This runs every 30 minutes and reports our current IP to NoIP.com to update Love2d.ddns.net.
Documentation=https://no-ip.com/
Documentation=file:///nobak/Installers/NoIP/noip-2.1.9-1/README.FIRST


[Service]
# 'forking' because process returns after starting daemon (traditional unix daemon).
Type=forking

# This program runs and returns, leaving the running daemon
ExecStart=/usr/local/bin/noip2

# Be in no hurry to start this.  Max nice is +19.
Nice=15

# If it dies for any reason, then restart it
Restart=always


[Install]
# Installs a hook to use this unit file when the system boots or shuts down
WantedBy=multi-user.target

Esegui manualmente un file di unità (ad es. Per il test):

  • inizia con $ sudo systemctl start noip2.
  • ricominciare con $ sudo systemctl restart noip2.
  • basta con $ sudo systemctl stop noip2.

Configurare il sistema per eseguire automaticamente un file di unità all'avvio o allo spegnimento:

  • iniziare a usare con $ sudo systemctl enable noip2.
  • fine usando con $ sudo systemctl disable noip2.

Vista del registro

  • $ sudo journalctl -u noip2
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.