Что ж, если предположить, что единственное, что изменяется для каждого файла модуля, это remote.example.com
деталь, вы можете использовать Instantiated Service .
Со systemd.unit
страницы руководства :
Необязательно, единицы могут быть созданы из файла шаблона во время выполнения. Это позволяет создавать несколько устройств из одного файла конфигурации. Если systemd ищет файл конфигурации модуля, он сначала ищет буквальное имя модуля в файловой системе. Если это не приводит к успеху, а имя модуля содержит символ «@», systemd будет искать шаблон модуля, который имеет то же имя, но со строкой экземпляра (т. Е. Часть между символом «@» и суффиксом) удалена. Пример: если запрашивается служба getty@tty3.service и файл с таким именем не найден, systemd будет искать getty @ .service и создавать экземпляр службы из этого файла конфигурации, если он найден.
По сути, вы создаете отдельный файл модуля, который содержит переменную (обычно %i
), где возникают различия, а затем они связываются, когда вы «включаете» эту службу.
Например, у меня есть файл модуля, /etc/systemd/system/autossh@.service
который выглядит так:
[Unit]
Description=AutoSSH service for ServiceABC on %i
After=network.target
[Service]
Environment=AUTOSSH_GATETIME=30 AUTOSSH_LOGFILE=/var/log/autossh/%i.log AUTOSSH_PIDFILE=/var/run/autossh.%i.pid
PIDFile=/var/run/autossh.%i.pid
#Type=forking
ExecStart=/usr/bin/autossh -M 40000 -NR 5000:127.0.0.1:5000 -i /opt/ServiceABC/.ssh/id_rsa_ServiceABC -l ServiceABC %i
[Install]
WantedBy=multi-user.target
Который я тогда включил
[user@anotherhost ~]$ sudo systemctl enable autossh@somehost.example.com
ln -s '/etc/systemd/system/autossh@.service' '/etc/systemd/system/multi-user.target.wants/autossh@somehost.example.com.service'
И может взаимодействовать с
[user@anotherhost ~]$ sudo systemctl start autossh@somehost.example.com
[user@anotherhost ~]$ sudo systemctl status autossh@somehost.example.com
autossh@somehost.example.service - AutoSSH service for ServiceABC on somehost.example
Loaded: loaded (/etc/systemd/system/autossh@.service; enabled)
Active: active (running) since Tue 2015-10-20 13:19:01 EDT; 17s ago
Main PID: 32524 (autossh)
CGroup: /system.slice/system-autossh.slice/autossh@somehost.example.com.service
├─32524 /usr/bin/autossh -M 40000 -NR 5000:127.0.0.1:5000 -i /opt/ServiceABC/.ssh/id_rsa_ServiceABC -l ServiceABC somehost.example.com
└─32525 /usr/bin/ssh -L 40000:127.0.0.1:40000 -R 40000:127.0.0.1:40001 -NR 5000:127.0.0.1:5000 -i /opt/ServiceABC/.ssh/id_rsa_ServiceABC -l ServiceABC somehost.example.com
Oct 20 13:19:01 anotherhost.example.com systemd[1]: Started AutoSSH service for ServiceABC on somehost.example.com.
[user@anotherhost ~]$ sudo systemctl status autossh@somehost.example.com
[user@anotherhost ~]$ sudo systemctl status autossh@somehost.example.com
autossh@somehost.example.com.service - AutoSSH service for ServiceABC on somehost.example.com
Loaded: loaded (/etc/systemd/system/autossh@.service; enabled)
Active: inactive (dead) since Tue 2015-10-20 13:24:10 EDT; 2s ago
Process: 32524 ExecStart=/usr/bin/autossh -M 40000 -NR 5000:127.0.0.1:5000 -i /opt/ServiceABC/.ssh/id_rsa_ServiceABC -l ServiceABC %i (code=exited, status=0/SUCCESS)
Main PID: 32524 (code=exited, status=0/SUCCESS)
Oct 20 13:19:01 anotherhost.example.com systemd[1]: Started AutoSSH service for ServiceABC on somehost.example.com.
Oct 20 13:24:10 anotherhost.example.com systemd[1]: Stopping AutoSSH service for ServiceABC on somehost.example.com...
Oct 20 13:24:10 anotherhost.example.com systemd[1]: Stopped AutoSSH service for ServiceABC on somehost.example.com.
Как видите, все экземпляры %i
в файле модуля заменяются на somehost.example.com
.
Хотя есть еще несколько спецификаторов, которые вы можете использовать в модульном файле, но я считаю, %i
что лучше всего работать в подобных случаях.