Posso usare un collegamento simbolico come servizio di systemd?


14

Ad esempio, ho un servizio chiamato mysshd.servicesotto la /usr/lib/systemd/system/directory. Posso creare un collegamento simbolico come:

ln -s /usr/lib/systemd/system/mysshd.service /usr/lib/systemd/system/fool.service

in modo che qualsiasi operazione che faccio con fool.service si rifletta su mysshd.service( systemctl enable/disable start/stop fool.servce)?

Il mio scopo è quello di sovrascrivere il servizio SSH nativo con un collegamento simbolico al mio servizio SSHD.


1
Perché non aggiungere e abilitare il servizio e disabilitare il servizio sshd nativo?
Lambert,

Voglio che il mio software sia compatibile con la versione precedente che utilizzava un collegamento simbolico /etc/init.d/ssh -> /etc/init.d/myssh.
nick

Ancora non capisco esattamente cosa intendi, ma secondo la tua linea <quote> in modo che qualsiasi operazione che faccio con fool.service si rifletta su mysshd.service (abilita / disabilita systemctl start / stop fool.servce)? </ Quote > potresti dare un'occhiata alle dipendenze di systemd (vedi wiki.archlinux.org/index.php/systemd#Handling_dependencies ) per avviare / abilitare il tuo servizio dopo sshd.
Lambert,

@nick benvenuto in Stack Exchange! su Stack Exchange è consuetudine mostrare complimenti per le risposte votando. puoi farlo facendo clic sulla freccia in alto a sinistra della risposta. se la mia risposta ha risolto il tuo problema, potresti anche considerare di fare clic sulla casella di controllo, per contrassegnarlo come accettato. Grazie!
strugee,

Risposte:


9

Per quanto ne so, systemd non se ne occuperà particolarmente bene. A quanto ho capito, vuoi ignorare il comportamento di sshd.service, giusto?

Fortunatamente per te, systemd è progettato per questo tipo di cose. È sufficiente inserire la definizione del servizio /etc/systemd/system/ssh.service, eseguire systemctl daemon-reloadper ricaricare i file di unità e systemd utilizzerà automaticamente quella configurazione anziché il sistema ssh.service.

Vuoi avere anche systemctl enable mysshd.servicelavoro? Nessun problema. Nella [Install]sezione del file dell'unità, aggiungi una riga che dice Alias=mysshd.service. Quindi esegui systemctl reenable ssh.serviceper fare in modo che systemd ripari i collegamenti simbolici dell'unità e sei d'oro.

Ora, non hai fornito dettagli su cosa mysshd.servicedovrebbe fare. Se è completamente diverso dal normale ssh.service, fantastico! Usa il metodo sopra. Tuttavia, se vuoi solo cambiare una piccola cosa, stai usando l'approccio sbagliato. systemd consente di creare "frammenti" di file di unità che verranno applicati in cima ai normali file di unità. Ciò consente di aggiungere o sostituire singole direttive consentendo al resto del file di unità di ricevere aggiornamenti dal gestore pacchetti. Per fare ciò, è sufficiente creare /etc/systemd/system/ssh.d/my-custom-config.conf(è possibile modificare my-custom-config.confper essere quello che si desidera e si possono anche avere più file di sostituzione). In quel file, inserisci le direttive che vuoi modificare o aggiungi al solito ssh.service. Puoi persino aggiungere Alias=direttive, in modo che systemctl start mysshd.servicefunzioni! Ricorda solo di eseguiresystemctl daemon-reloaddopo aver finito (e, se hai usato Alias=, systemctl reenable ssh.service).

A parte questo, mai e poi mai cambiare i file di unità di sistema in /usr/lib/systemd. Mai! Lo standard di gerarchia dei file system richiede che /usrvenga considerato di sola lettura. In pratica, ciò significa che il gestore dei pacchetti gestisce /usr(tranne che per /usr/local) e non si tocca ciò che gestisce il gestore dei pacchetti, soprattutto perché qualsiasi cosa si cambi verrà probabilmente sovrascritta. Invece, metti le tue cose in un posto come /etc.


1
Per chiarire un po ': se vuoi sovrascrivere foo.service, esegui sudo systemctl edit foo.servicee salverà qualunque cosa tu abbia digitato /etc/systemd/system/foo.service.d/override.conf.
Rockallite,

Inoltre, la Alias=direttiva NON funziona nei file di sostituzione. Vedi github.com/systemd/systemd/issues/1090
Rockallite

@Rockallite non lo sapeva systemctl edital momento in cui ho scritto questa risposta. sentiti libero di modificare la mia risposta per riflettere il Alias=bug (inserisci "OK with answerer" o qualcosa nel messaggio di modifica). buona pesca.
Strugee,

5

Utilizzare linkcon il percorso completo:

systemctl link /home/nick/myservice.service

Si noti che non è possibile collegare un file di servizio che è già di per sé un collegamento.


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.