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

Я только что обновил сервер с 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 сервис?

17
задан 22 May 2015 в 02:29

1 ответ

первое правило для миграции на systemd

На данном этапе в 2015, наиболее вероятно, что кто-то уже сделал его.

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

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

шаблонная единица

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

[Unit]
Description=AutoSSH service for a reverse tunnel from %i 
After=network.target

[Service]
User=autossh
EnvironmentFile=/etc/%p/%i.conf
ExecStart=/usr/bin/autossh -M 0 -q -N $SSH_USER@%i $SSH_OPTIONS

[Install]
WantedBy=multi-user.target

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

SSH_USER=joe

Все обычные средства управления тогда применяются:

  • systemctl enable autossh@other_server.example — Позвольте экземпляру быть автоматически запущенным при начальной загрузке.
  • systemctl start autossh@other_server.example — Вручную запустите тот экземпляр сразу.
  • systemctl status autossh@other_server.example — Посмотрите его состояние.

И да, первое правило даже относится к этому. Поиск, можно найти, что я был избит к этому, на чуть менее чем две недели, Greg Freemyer в OpenSUSE.

0
ответ дан 22 May 2015 в 02:29

Другие вопросы по тегам:

Похожие вопросы: