Я нашел этот файл службы systemd, чтобы запустить autossh для поддержки 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
Есть ли способ настроить systemd для запуска нескольких туннелей в одном сервисе.
Я не хочу создавать N системных служебных файлов, так как я хочу избежать копирования + вставки.
Все служебные файлы будут идентичны, кроме «remote.example.com» будет заменено другими именами хостов.
1,5 года спустя ...
Я задал этот вопрос примерно 1,5 года назад.
Мое мнение немного изменилось. Да, хорошо, что вы можете сделать это с помощью systemd (я все еще использую его), но я буду использовать управление конфигурацией в будущем.
Почему systemd должен реализовывать язык шаблонов и заменять% h?
Несколько месяцев спустя я думаю, что этот цикл и шаблоны должны быть решены с помощью инструмента, который автоматизирует настройку. Сейчас я использую один инструмент из этого списка в Википедии .
Ответы:
Что ж, если предположить, что единственное, что изменяется для каждого файла модуля, это
remote.example.com
деталь, вы можете использовать Instantiated Service .Со
systemd.unit
страницы руководства :По сути, вы создаете отдельный файл модуля, который содержит переменную (обычно
%i
), где возникают различия, а затем они связываются, когда вы «включаете» эту службу.Например, у меня есть файл модуля,
/etc/systemd/system/autossh@.service
который выглядит так:Который я тогда включил
И может взаимодействовать с
Как видите, все экземпляры
%i
в файле модуля заменяются наsomehost.example.com
.Хотя есть еще несколько спецификаторов, которые вы можете использовать в модульном файле, но я считаю,
%i
что лучше всего работать в подобных случаях.источник
enable
действие - это то, что заставляет юнит / сервис запускаться при загрузке.Вот пример Python, который я искал. Имя
@
файла в сервисе позволяет запустить N процессов:Различные методы, чтобы назвать это
Включение различных подсчетов, например:
Включить 30 работников:
Включить 2 рабочих:
Тогда обязательно перезагрузите:
Теперь вы можете запустить / остановить затем различными способами:
Начало 1:
Начать несколько:
Остановить несколько:
Проверить состояние:
ОБНОВЛЕНИЕ : Чтобы управлять экземплярами как одним сервисом, вы можете сделать что-то вроде этого:
/etc/systemd/system/some-worker@.service:
/usr/bin/some-worker-start.sh:
/etc/systemd/system/some-worker.service:
И теперь вы можете управлять всеми экземплярами с
sudo systemctl some-worker (start|restart|stop)
Вот несколько шаблонов для вашего
script.py
:источник
systemctl some-worker (start|restart|stop)
узнать, над какими экземплярами работать?Now you can start/stop then in various ways
.Ответ Грегла мне очень помог. Вот пример шаблона модуля, который я использовал в своем коде на примере выше для сервера заданий Gearman. Я сделал сценарий оболочки, который позволяет мне создавать X «рабочих», используя этот шаблон.
источник