Znalazłem ten plik usługi systemowej, aby uruchomić autossh, aby utrzymać tunel ssh: https://gist.github.com/thomasfr/9707568
[Unit]
Description=Keeps a tunnel to 'remote.example.com' open
After=network.target
[Service]
User=autossh
# -p [PORT]
# -l [user]
# -M 0 --> no monitoring
# -N Just open the connection and do nothing (not interactive)
# LOCALPORT:IP_ON_EXAMPLE_COM:PORT_ON_EXAMPLE_COM
ExecStart=/usr/bin/autossh -M 0 -N -q -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -p 22 -l autossh remote.example.com -L 7474:127.0.0.1:7474 -i /home/autossh/.ssh/id_rsa
[Install]
WantedBy=multi-user.target
Czy istnieje sposób skonfigurowania systemd, aby uruchamiał kilka tuneli w jednej usłudze.
Nie chcę tworzyć plików usługi systemowej N, ponieważ chcę uniknąć kopiowania i wklejania.
Wszystkie pliki usług byłyby identyczne, z wyjątkiem „remote.example.com” zostałyby zastąpione innymi nazwami hosta.
1,5 roku później ...
Zadałem to pytanie około 1,5 roku temu.
Mój umysł trochę się zmienił. Tak, fajnie, że możesz to zrobić za pomocą systemd (nadal go używam), ale w przyszłości będę używać zarządzania konfiguracją.
Dlaczego systemd powinien wdrożyć język szablonów i zastąpić% h?
Kilka miesięcy później myślę, że tę pętlę i szablony należy rozwiązać za pomocą narzędzia automatyzującego konfigurację. Używam teraz jednego narzędzia z tej listy na wikipedii .
Odpowiedzi:
Zakładając, że jedyną zmianą na plik jednostkowy jest
remote.example.com
część, możesz skorzystać z usługi tworzenia instancji .Ze strony podręcznika
systemd.unit
:Zasadniczo tworzysz pojedynczy plik jednostkowy, który zawiera zmienną (zwykle
%i
), w której występują różnice, a następnie łączy się ją, gdy „włączysz” tę usługę.Na przykład mam plik o nazwie,
/etc/systemd/system/[email protected]
który wygląda następująco:Które następnie włączyłem
I może wchodzić w interakcje z
Jak widać, wszystkie wystąpienia
%i
pliku jednostkowego zostają zastąpione przezsomehost.example.com
.Jest jeszcze kilka specyfikatorów , których można użyć w pliku jednostkowym, ale uważam, że
%i
najlepiej działa w takich przypadkach.źródło
enable
akcja powoduje, że jednostka / usługa zaczyna się przy starcie.Oto przykład python, którego szukałem. Nazwa
@
pliku usługi umożliwia uruchomienie N procesów:Różne metody, aby to nazwać
Włączanie różnych zliczeń, na przykład:
Włącz 30 pracowników:
Włącz 2 pracowników:
Następnie pamiętaj, aby ponownie załadować:
Teraz możesz zacząć / zatrzymać na różne sposoby:
Rozpocznij 1:
Rozpocznij wiele:
Zatrzymaj wiele:
Sprawdź status:
AKTUALIZACJA : Aby zarządzać instancjami jako jedną usługą, możesz zrobić coś takiego:
/etc/systemd/system/[email protected]:
/usr/bin/some-worker-start.sh:
/etc/systemd/system/some-worker.service:
A teraz możesz zarządzać wszystkimi instancjami za pomocą
sudo systemctl some-worker (start|restart|stop)
Oto płyta dla Twojego
script.py
:źródło
systemctl some-worker (start|restart|stop)
wiadomo, w których przypadkach należy pracować?Now you can start/stop then in various ways
.Odpowiedź GregLa bardzo mi pomogła. Oto przykład szablonu jednostki, którego użyłem w moim kodzie, korzystając z powyższego przykładu dla serwera zadań gearman. Zrobiłem skrypt powłoki, który pozwala mi utworzyć X „pracowników” przy użyciu tego jednego szablonu.
źródło