Я только что обновил сервер с 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
сервис?
На данном этапе в 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.