Перенести основной скрипт upstart в systemd

17

Я только что обновил сервер с Ubuntu 14.10 до 15.04, и несколько сервисов, которые я запускаю с помощью пользовательских сценариев upstart, больше не работают.

Насколько я понимаю, мне нужно переписать их как systemdсервисы, но мысль об изучении всей systemdсистемы в одночасье немного устрашает.

Сценарий upstart просто запускается autosshпри запуске, и у меня есть пара других подобных сценариев, которые запускают долго выполняющиеся процессы.

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

Как я могу переписать это как systemdуслугу?

trvrm
источник
3
Systemd для пользователей Upstart - хорошая отправная точка.
Муру

Ответы:

13

первое правило для перехода на systemd

На данный момент, в 2015 году, скорее всего, кто-то уже сделал это.

systemd существует уже несколько лет. И была целая индустрия людей, которые писали файлы и публиковали их. GitHub, в частности, похоже, привлекает хранилища коллекций сервисных единиц.

Действительно, простой поиск в WWW autossh.service(как фраза) приводит к:

блок шаблона

Тем не менее, как я уже отмечал в нескольких местах только на StackExchange, этот вид миграции не является механистическим процессом, а иногда просто роботизированный перевод того, что у вас есть, в файл модуля делает что-то неправильно или, по крайней мере, плохо. В этом случае autosshположительно задыхается, чтобы быть обработанным с модулем шаблона , что это экземпляр в фактических единицах обслуживания, параметризованных целевым именем. Так как /etc/systemd/system/autossh@.service, есть:

[Единица измерения]
Описание = служба AutoSSH для обратного туннеля от% i 
После того, как = network.target

[Обслуживание]
Пользователь = autossh
EnvironmentFile = / и т.д. /% р /% i.conf
ExecStart = / usr / bin / autossh -M 0 -q -N $ SSH_USER @% i $ SSH_OPTIONS

[Установить]
WantedBy = multi-user.target

Создайте файл с именем /etc/autossh/other_server.example.conf, минимально:

SSH_USER = джо

Затем применяются все обычные элементы управления:

  • systemctl enable autossh@other_server.example - Разрешить автоматический запуск экземпляра при загрузке.
  • systemctl start autossh@other_server.example - Запустите этот экземпляр немедленно.
  • systemctl status autossh@other_server.example - Смотрите его статус.

И да, первое правило даже относится к этому. В поисках можно обнаружить, что меня чуть не две недели избил Грег Фримиер из OpenSUSE.

JdeBP
источник
Спасибо - я придумал нечто похожее на это, но я не знал об идее «шаблонных блоков»
trvrm
@JdeBP У меня также есть подобный вопрос здесь . Хотел посмотреть, сможете ли вы мне помочь.
user1950349