В статье речь будет идти о systemd, который вошел в Debian 8 jessie. Я пишу о Debian, потому что пользуюсь именно им. Пишу о systemd не потому что его фанат, но некоторые вещи меня действительно радуют.
Так почему же больше не нужны supervisord и forever?
Задача supervisord и его аналога написанного на nodejs — forever: демонизировать недемонизируемое и поднимать, когда оно падает. Эти задачи сейчас выполняет штатный systemd. Что в этом хорошего? Ну как минимум не нужны дополнительные инструменты (которых кстати не только два упомянутых) и есть штатное системное средство для решения таких задач.
Например очень легко настроить таким образом sshd, чтобы он поднимался в случае падения или kill. Нам нужно найти .service файл нашего sshd. Для этого выполним:
Собственно /lib/systemd/system/ssh.service и есть нужный нам файл. Вот такое его содержимое по умолчанию:
В секции Service есть специальная опция “Restart” она как раз указывает, в каких случаях перезапускать сервис автоматически. Мы можем написать туда:
И при любом падении или попытке не взлететь sshd будет перезапущен. Чтобы изменения в файле вступили в силу, нужно выполнить:
Теперь проверим, что сервис работает:
Давайте убьем sshd и посмотрим как он запустился снова:
Видите, PID отличается — это говорит о том, что sshd действительно сдох, а systemd запустил его заново.
Поздравляю! Теперь Ваш sshd будет невозможно убить kill-ом и Ваш сервер будет доступен по ssh даже в случае убийства sshd.
Так почему же больше не нужны supervisord и forever?
Задача supervisord и его аналога написанного на nodejs — forever: демонизировать недемонизируемое и поднимать, когда оно падает. Эти задачи сейчас выполняет штатный systemd. Что в этом хорошего? Ну как минимум не нужны дополнительные инструменты (которых кстати не только два упомянутых) и есть штатное системное средство для решения таких задач.
Например очень легко настроить таким образом sshd, чтобы он поднимался в случае падения или kill. Нам нужно найти .service файл нашего sshd. Для этого выполним:
root@lynx:~# systemctl status ssh ● ssh.service - OpenBSD Secure Shell server Loaded: loaded (/lib/systemd/system/ssh.service; enabled) Active: active (running) since Fri 2015-10-09 20:09:29 UTC; 55s ago Main PID: 26884 (sshd) CGroup: /system.slice/ssh.service └─26884 /usr/sbin/sshd -D Oct 09 20:09:29 lynx sshd[26884]: Server listening on 0.0.0.0 port 22. Oct 09 20:09:29 lynx sshd[26884]: Server listening on :: port 22.
Собственно /lib/systemd/system/ssh.service и есть нужный нам файл. Вот такое его содержимое по умолчанию:
[Unit] Description=OpenBSD Secure Shell server After=network.target auditd.service ConditionPathExists=!/etc/ssh/sshd_not_to_be_run [Service] EnvironmentFile=-/etc/default/ssh ExecStart=/usr/sbin/sshd -D $SSHD_OPTS ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure [Install] WantedBy=multi-user.target Alias=sshd.service
В секции Service есть специальная опция “Restart” она как раз указывает, в каких случаях перезапускать сервис автоматически. Мы можем написать туда:
Restart=always
И при любом падении или попытке не взлететь sshd будет перезапущен. Чтобы изменения в файле вступили в силу, нужно выполнить:
root@lynx:~# systemctl daemon-reload root@lynx:~# systemctl restart ssh
Теперь проверим, что сервис работает:
root@lynx:~# systemctl status ssh ● ssh.service - OpenBSD Secure Shell server Loaded: loaded (/lib/systemd/system/ssh.service; enabled) Active: active (running) since Fri 2015-10-09 20:09:29 UTC; 3min 58s ago Main PID: 26884 (sshd) CGroup: /system.slice/ssh.service └─26884 /usr/sbin/sshd -D Oct 09 20:09:29 lynx sshd[26884]: Server listening on 0.0.0.0 port 22. Oct 09 20:09:29 lynx sshd[26884]: Server listening on :: port 22.
Давайте убьем sshd и посмотрим как он запустился снова:
root@lynx:~# killall sshd root@lynx:~# systemctl status ssh ● ssh.service - OpenBSD Secure Shell server Loaded: loaded (/lib/systemd/system/ssh.service; enabled) Active: active (running) since Fri 2015-10-09 20:13:47 UTC; 1s ago Main PID: 14123 (sshd) CGroup: /system.slice/ssh.service └─14123 /usr/sbin/sshd -D Oct 09 20:13:47 lynx sshd[14123]: Server listening on 0.0.0.0 port 22. Oct 09 20:13:47 lynx sshd[14123]: Server listening on :: port 22.
Видите, PID отличается — это говорит о том, что sshd действительно сдох, а systemd запустил его заново.
Поздравляю! Теперь Ваш sshd будет невозможно убить kill-ом и Ваш сервер будет доступен по ssh даже в случае убийства sshd.
