· synapse matrix systemd rclocal restart

Автоматический запуск или рестарт Synapse с помощью rc.local

У себя на работе мы используем Matrix (Synapse + Riot) в качестве корпоративного мессенджера. Для обеспечения нормальной работы чата необходимо, чтобы система могла его запускать автоматически при (пере)загрузке. Помимо официального способа с systemd можно использовать /etc/rc.local. Зачем это нужно? Например, если необходимо обеспечить очередность запуска сервисов. Это особенно актуально если используются боты, которые выступают не как appservice, а как обычные клиенты.

Systemd unit для /etc/rc.local

Для начала добавим юнит для systemd, который будет запускать скрипт /etc/rc.local:

[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local

[Service]
Type=forking
ExecStart=/etc/rc.local
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target

Его надо положить в /etc/systemd/system/rc-local.service и выполнить systemctl daemon-reload. Включаем автозапуск юнита с помощью systemctl enable rc-local.

Файл для (пере)запуска Synapse

Кладем простой скрипт куда-нибудь в удобное место. Я предпочитаю в корень хомяка пользователя, от которого будет стартовать Synapse:

#!/bin/bash

cd /home/matrix/synapse
source bin/activate
synctl restart

Не забываем сделать его исполняемым.

/etc/rc.local

Создаем /etc/rc.local:

#!/bin/bash

/bin/su - matrix -c /home/matrix/restart_synapse.sh

exit 0

У меня synapse работает от пользователя matrix.

exit 0 в конце обязателен, иначе возможно непредсказуемое поведение systemd. Например, на одной из систем сервис, который запускается из rc.local, падал при запуске, в итоге systemd возвращался exitcode 1 и выпадала в emergency shell. Все, конечно, работало, но с консоли войти было нельзя.

Не забываем сделать его исполняемым!


Проверьте настройку с помощью перезагрузки сервера, виртуалки или контейнера. Все должно работать.

  • LinkedIn
  • Tumblr
  • Reddit
  • Google+
  • Pinterest
  • Pocket