Migrare lo script upstart di base su systemd


17

Ho appena aggiornato un server da Ubuntu 14.10 a 15.04 e un paio di servizi che avvio tramite script upstart personalizzati non sono più in esecuzione.

La mia comprensione è che ho bisogno di riscriverli come systemdservizi, ma il pensiero di imparare l'intero systemdsistema dall'oggi al domani è un po 'scoraggiante.

Lo script upstart si avvia semplicemente autosshall'avvio e ho un paio di altri script simili che avviano processi di lunga durata.

#/etc/init/autossh.conf

description "Maintain a permanent SSH tunnel to <other_server>"

start on started mountall
stop on shutdown

exec autossh -N other_server

Come posso riscrivere questo come systemdservizio?


3
Systemd per gli utenti Upstart è un buon punto di partenza.
muru,

Risposte:


13

la prima regola per la migrazione a systemd

A questo punto, nel 2015, è molto probabile che qualcuno l'abbia già fatto.

systemd è in circolazione da alcuni anni. E c'è stata un'intera industria di persone che scrivono file di unità e li pubblicano. GitHub, in particolare, sembra attrarre repository di raccolte di unità di servizio.

Effettivamente semplicemente la ricerca nel WWW per autossh.service(come una frase) si presenta:

un'unità modello

Detto questo, come ho sottolineato in diversi punti su StackExchange da solo, questo tipo di migrazione non è un processo meccanicistico, e talvolta la traduzione robotica da qualunque cosa si abbia in un file di unità sta facendo le cose in modo errato, o almeno male. In questo caso, autosshsta positivamente ansimando per essere gestito con un'unità modello , che viene istanziata in unità di servizio effettive, parametrizzate dal nome di destinazione. Quindi /etc/systemd/system/autossh@.service, avere:

[Unità]
Descrizione = Servizio AutoSSH per un tunnel inverso da% i 
Dopo = network.target

[Servizio]
Utente = autossh
EnvironmentFile = / etc /% p /% i.conf
ExecStart = / usr / bin / autossh -M 0 -q -N $ SSH_USER @% i $ SSH_OPTIONS

[Installare]
WantedBy = multi-user.target

Crea un file chiamato /etc/autossh/other_server.example.confcon almeno:

SSH_USER = joe

Si applicano quindi tutti i soliti controlli:

  • systemctl enable autossh@other_server.example - Abilita l'avvio automatico di un'istanza al bootstrap.
  • systemctl start autossh@other_server.example - Avvia manualmente quell'istanza immediatamente.
  • systemctl status autossh@other_server.example - Vedi il suo stato.

E sì, la prima regola si applica anche a questo. Cercando, si può scoprire che sono stato picchiato a questo, da poco meno di due settimane, da Greg Freemyer a OpenSUSE.


Grazie - mi è venuto in mente qualcosa di simile, ma non ero a conoscenza dell'idea di "unità modello"
trvrm,

@JdeBP Ho anche una domanda simile qui . Volevo vedere se puoi aiutarmi.
user1950349
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.