У меня есть файл конфигурации upstart, показанный ниже, который отлично работает в Ubuntu 14:
#/etc/init/data_server.conf
#sudo start data_server
#sudo stop data_server
#sudo status data_server
start on runlevel [2345]
stop on runlevel [016]
chdir /opt/hold/data_server
respawn
post-start script
echo "data server started at `date +"%F %T"` on `hostname -f`" | mailx -r "[email protected]" -s "data server Started" "[email protected]"
end script
post-stop script
sleep 30
end script
limit core unlimited unlimited
limit nofile 100000 100000
setuid goldy
exec ./data_server --init_file=../config/tree.init --port=8080 --dir=/data/hold/ --max_sec=2400 --max_mb=100 --active=5
Теперь мы переходим на Ubuntu 16, поэтому мы не можем использовать upstart
и, похоже, нам нужно использовать systemd
здесь. Какие изменения мне нужно сделать, чтобы написать скрипт в systemd
?
Мне нужно убедиться, что при каждой перезагрузке системы или завершении работы приложения автоматически запускается мой systemd
скрипт, который, в свою очередь, запускает мой data server
.
решение1
Ваш скрипт upstart сильно изменится. Вам не придется вручную указывать так много директив, поэтому он также будет намного короче.
Заставить процесс всегда запускаться при загрузке и перезапускаться при сбое можно всего одной строкой:
Restart=always
Я не знаю, сколько пользовательских изменений вам нужно сохранить, но, как минимум, похоже, вам нужно будет сохранить команды chdir
и exec
.
Вот пример базового скрипта systemd для вашего приложения:
[Unit]
Description=My-service
[Service]
Type=simple
WorkingDirectory=/opt/hold/data_server
ExecStart=/path/to/data_server --init_file=../config/tree.init --port=8080 --dir=/data/hold/ --max_sec=2400 --max_mb=100 --active=5
Restart=always
[Install]
WantedBy=multi-user.target
Я обнаружил, что это полезный ресурс при написании пользовательских файлов юнитов:https://www.freedesktop.org/software/systemd/man/systemd.unit.html