Scrittura di file di servizio di base per systemd


103

Sto sviluppando un'applicazione Nodejs con cui l'utente interagisce tramite HTTP su localhost. Non ci sono praticamente parametri e il demone non ha praticamente dipendenze e deve essere attivo al momento del login.

Vorrei seguire gli idiomi su ciascuna piattaforma per gli script di avvio, e questo significa Upstart su Ubuntu e systemd su Fedora.

  • Esistono buoni tutorial per scrivere file di sistema?
  • Ci sono delle "migliori pratiche" di cui essere a conoscenza?

Ho trovato queste risorse:

Sto principalmente cercando una sorta di API come riferimento, nonché un formato di base da seguire.


La pagina Wiki di Arch Linux su systemd ha un'interessante sezione sulla scrittura di file di servizio.
Rudy Matela,

> man systemd.service>> man systemd.unit
truezion

Risposte:


29

Vorrei iniziare con le pagine di manuale di Systemd . Rappresentano una risorsa completa del sistema e dei servizi.

Ci sono anche le FAQ di Systemd di freedesktop .


43
Le pagine man saranno utili (vorrei che fosse più pulito però), ma c'è un tutorial di base sui file di sistema? Ad esempio quali parti sono necessarie, quali parti sono consigliate e quali parti sono opzionali. Le pagine man sembrano supporre che io sia già un esperto di file systemd di sistema, cosa che non sono.
beatgammit,

Purtroppo non lo so. Probabilmente si presume che se si stanno scrivendo initscripts, si sa già come scrivere initscripts. Guarda gli script Arch e scegline uno simile a quello di cui hai bisogno: archlinux.org/packages/community/i686/systemd
jasonwryan

1
Grazie! Con il tuo aiuto e il blog che ho trovato, sono stato in grado di farne funzionare uno di base. Systemd sembra molto più bello di upstart o del vecchio demone systemv init.
beatgammit,

49
Chi ha tempo dentro vive per iniziare con quello. Voglio dire, se sai cosa stai facendo è un ottimo riferimento, ma la vacca sacra le pagine del manuale sono complesse.
Jonathan Komar,

1
@ macmadness86 L'OP stava cercando una fonte autorevole (vedi l'ultimo paragrafo); per la maggior parte delle esigenze, leggere il file di servizio per un'app simile e quindi consultare parti specifiche della manpagina sarà più che sufficiente per arrivarci. In realtà sono piuttosto semplici.
Jasonwryan,

180

Il seguente esempio è ispirato a questo link, che in realtà non menziona tutti i passaggi ed è elencato solo per accreditare la fonte: http://patrakov.blogspot.com/2011/01/writing-systemd-service-files.html

Passaggio 1 : ho creato questo file (posizione della nota) che essenzialmente avvia un processo bash con un argomento esteso. Potresti lanciare il tuo comando che potrebbe essere diverso da bash.

[root@y500-fedora ~]# cat /etc/systemd/system/foo.service 
[Unit]
Description=foo

[Service]
ExecStart=/bin/bash -c "while true; do /bin/inotifywait -qq --event close_write /sys/class/backlight/acpi_video0/brightness; su myusername -c '/bin/xbacklight -display :0 -set $(cat /sys/class/backlight/acpi_video0/brightness)'; done"

[Install]
WantedBy=multi-user.target

Passaggio 2 :

Ricarica systemd:

systemctl daemon-reload

Inizia il nuovo servizio:

systemctl enable foo

(allo stesso modo puoi disablefarlo)

(facoltativo) Passaggio 3 : dovrebbe avviarsi automaticamente al successivo riavvio in modalità multiutente (eseguire il livello 3) ma se si desidera avviarlo immediatamente:

systemctl start foo
systemctl status foo # optional, just to verify

Aggiornamento: Per completezza, dovrei aggiungere che Ubuntu Bionic sembra avere una pagina man molto approfondita. RTFM qui


57
Grazie per aver pubblicato un breve tutorial e non solo per il collegamento a pagine man fuori sede!
Tobias J

2
systemctl ha un collegamento al comando cat, come riferimento.
Andy Bettisworth, l'

Qual è la scorciatoia del comando cat? Ti piace un modo per creare e modificare i file di controllo di systemd senza inserire l'intero percorso?
JpaytonWPD,

quali sono le autorizzazioni che questo file dovrebbe avere idealmente?
Knocte,

2
Secondo la pagina man systemd.unit, dovresti inserirla /etc/systemd/system. / usr / lib / systemd è dove i pacchetti di distribuzione appropriati inseriscono i loro file.
wbkang,

4

2
Sebbene ciò possa teoricamente rispondere alla domanda, sarebbe preferibile includere qui le parti essenziali della risposta e fornire il collegamento come riferimento.
Stephen Rauch,

1
@StephenRauch So che i link semplici non sono i benvenuti, ma questo è un argomento enorme e non è facile riassumere in una risposta.
Caracal,

Questa è stata la guida più leggibile che ho trovato. Questa è una buona risposta :-)
tratta bene le tue mod il

DigitalOcean ha anche una serie piuttosto completa di tutorial e documentazione associata: digitalocean.com/community/tutorials/…
irbanana,
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.