Confuso su "/etc/init.d" e sui servizi in "/ lib / systemd / system"


15

Sono completamente nuovo nel mondo di Linux, quindi mi dispiace per qualsiasi cosa sbagliata che potrei dire.

Sto cercando di eseguire un Mongo DB su una macchina Debian 8.5. Quando ho installato il pacchetto (pre-costruito da percona.com), ho notato i seguenti file:

/etc/init.d/mongod (1)
/lib/systemd/system/mongod.service (2)

Informazioni su /etc/init.d/mongod

Capisco che questo viene chiamato (purché sia ​​registrato tramite update-rc.d) all'avvio / in altri stati di sistema particolari (non voglio essere tecnico su questo, sto assorbendo molte informazioni e questo sembra meno importante).

Per me va benissimo. Lo script esegue molte inizializzazioni e infine avvia il demone mongo. Sembra avere "trigger" per avvio, arresto, riavvio, ecc. E per quanto ho capito posso innescare quelli con sudo service mongod <action>.

Informazioni su /lib/systemd/system/mongod.service

Questo file sembra fare la stessa cosa (cioè eseguire mongo), ma con meno configurazione, solo una riga nel parametro ExecStart:

[Unit]
Description=MongoDB (High-performance, schema-free document-oriented database)
After=time-sync.target network.target
[Service]
Type=forking
User=mongod
Group=mongod
PermissionsStartOnly=true
EnvironmentFile=/etc/default/mongod
ExecStart=/usr/bin/env bash -c "/usr/bin/mongod $OPTIONS > ${STDOUT} 2> ${STDERR}"
PIDFile=/var/run/mongod.pid
[Install]
WantedBy=multi-user.target

Per quanto ho capito, questo può essere attivato sudo systemctl start mongod.

  • Non capisco se questo viene chiamato all'avvio o meno.

  • Non capisco perché la necessità di due di questi file di "servizio", e come posso liberarmene (forse quello in / lib / systemd, dato che è molto più semplice).

  • Non capisco se c'è qualche relazione tra i due.

  • Ho letto che systemctlfunziona anche con gli init.dscript e in questo caso non capisco da quale dei due file verrà attivato systemctl mongod start.

Penso che ci sia un po 'di ridondanza e dovrei scegliere solo uno dei due modi. E voglio essere sicuro che lo sia

  • chiamato all'avvio
  • richiamabile tramite comando (come serviceo systemctl).

Potresti aiutarmi a schiarirmi le idee? Con l'aiuto di alcuni commenti posso probabilmente concentrarmi e restringere la domanda.

Risposte:


12

Quando si dispone sia di uno init.dscript che di un .servicefile systemd con lo stesso nome, systemd utilizzerà il file di servizio per tutte le operazioni. Credo che il servicecomando reindirizzerà a systemd. Lo script init.d verrà ignorato.

Usa systemd. È nuovo in Debian 8, ma è l'impostazione predefinita. I file di servizio di Systemd dovrebbero apparire più semplici degli script init.d. Non hai menzionato alcuna funzionalità specifica di cui hai bisogno che non è supportata dal servizio systemd.

Se il file di servizio non fosse incluso, systemdutilizzerebbe felicemente lo script init.d. Quindi lo sviluppatore del pacchetto mongod ti sta dicendo che pensano che questa definizione di systemd sia migliore :).

Guarda l'output di systemctl status mongod. Se il servizio è abilitato per essere avviato all'avvio, la Loaded:riga mostrerà "abilitato". Altrimenti puoi usare systemctl enable mongod. Puoi anche includere l'opzione --nowe inizierà mongod contemporaneamente.


Grazie! Studierò systemd e alla fine lo userò. Per ora volevo disabilitarlo e infine eseguire lo script init.d su cui stavo lavorando. Sono andato systemctl disable mongod:; quindi rinominato mongod.service in mongod-backup.service; allora systemctl daemon-reload. Pensi che fosse corretto? Ho letto che non dovresti modificare i file in / lib / systemd / system /, ma senza rinominare, systemctl ha continuato a ignorare lo script init.d.
Natario,

I file in / lib / systemd non sono conffile. Non posso davvero raccomandare di installare un pacchetto debian e di modificarne i file (e successivamente aggiornare il pacchetto). Invece, dovresti rinominare lo script init.d su cui stai "lavorando" (presumibilmente modificando?). Gli script init.d tendono ad essere conffiles. Se un aggiornamento modifica un conffile (per il quale non dovrebbe esserci alcun motivo), ti avviserà per primo. In questo caso, mi aspetto che ti informi se è mai disponibile una versione aggiornata dello script init.d originale (effettivamente) eliminato.
sourcejedi,

È possibile che tu debba aggiungere dipendenze per l'ordinazione dal tuo nuovo servizio, ai servizi da cui dipendeva mongod. C'è anche la possibilità che dovrai rimuovere alcune dipendenze rigorose, ma non avrei pensato. Un modo sicuro per modificare i servizi interessati è copiarli /etc/systemd/system/e modificarli.
sourcejedi,

In generale, penso che attenersi a systemd sia più semplice. Ora stai studiando le funzioni bash, init-funzioni e back-compat di systemd. Dato che non stai imparando un puro sistema init SysV, se mai usi un tale sistema, c'è il rischio che ti aspetti funzionalità che effettivamente provengono da systemd.
sourcejedi,
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.