Назад | Перейти на главную страницу

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

У меня есть файл конфигурации выскочки, как показано ниже, который отлично работает в 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 "abc@host.com" -s "data server Started" "pqr@host.com"
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.

Ваш сценарий выскочки сильно изменится. Вам не нужно вручную указывать так много директив, так что это также будет намного короче.

Чтобы процесс всегда запускался при загрузке и перезапускался при сбое, достаточно одной строки:

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