Przeprowadź migrację podstawowego skryptu aktualizacji do systemu

17

Właśnie zaktualizowałem serwer z Ubuntu 14.10 do 15.04, a kilka usług, które uruchamiam za pomocą niestandardowych skryptów upstart, już nie działa.

Rozumiem, że muszę ponownie napisać je jako systemdusługi, ale myśl o nauce całego systemdsystemu z dnia na dzień jest nieco zniechęcająca.

Skrypt początkowy po prostu uruchamia się autosshprzy starcie, a ja mam kilka innych podobnych skryptów, które uruchamiają długotrwałe procesy.

#/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

Jak mogę ponownie napisać to jako systemdusługę?

trvrm
źródło
3
Systemd dla użytkowników Upstart jest dobrym punktem wyjścia.
muru

Odpowiedzi:

13

pierwsza reguła migracji do systemd

W tym momencie w 2015 roku najprawdopodobniej ktoś już to zrobił.

Systemd istnieje już od kilku lat. I istnieje cała chata ludzi, którzy piszą pliki jednostek i publikują je. W szczególności GitHub wydaje się przyciągać repozytoria kolekcji jednostek usługowych.

Rzeczywiście po prostu autossh.servicepojawia się wyszukiwanie w sieci (jako fraza):

jednostka szablonu

To powiedziawszy, jak wskazałem w kilku miejscach na samym StackExchange, ten rodzaj migracji nie jest procesem mechanistycznym, a czasami po prostu automatyczne tłumaczenie z tego, co ktoś ma na plik jednostkowy, robi coś źle, a przynajmniej źle. W tym przypadku autosshpozytywnie dyszy do obsługi za pomocą jednostki szablonu , że jest on tworzony w rzeczywistych jednostkach usługowych, parametryzowanych przez nazwę celu. Tak jak /etc/systemd/system/[email protected]mają:

[Jednostka]
Opis = usługa AutoSSH dla tunelu zwrotnego od% i 
After = network.target

[Usługa]
Użytkownik = autossh
EnvironmentFile = / etc /% p /% i.conf
ExecStart = / usr / bin / autossh -M 0 -q -N $ SSH_USER @% i $ SSH_OPTIONS

[Zainstalować]
WantedBy = multi-user.target

Utwórz plik o nazwie /etc/autossh/other_server.example.confminimalnie:

SSH_USER = Joe

Obowiązują wówczas wszystkie zwykłe kontrole:

  • systemctl enable autossh@other_server.example - Włącz automatyczne uruchamianie instancji podczas ładowania początkowego.
  • systemctl start autossh@other_server.example - Ręcznie uruchom tę instancję natychmiast.
  • systemctl status autossh@other_server.example - Zobacz jego status.

I tak, nawet pierwsza zasada ma do tego zastosowanie. Szukając, okazało się, że zostałem do tego pobity, tuż przed dwoma tygodniami, przez Grega Freemyera z OpenSUSE.

JdeBP
źródło
Dziękuję - wymyśliłem coś podobnego do tego, ale nie miałem pojęcia o „jednostkach szablonu”
trvrm
@JdeBP Mam również podobne pytanie tutaj . Chciałem sprawdzić, czy możesz mi pomóc.
user1950349,