Anyservice
Anyservice позволяет запускать сервисы systemd (.service-файлы) на системе с sysvinit с помощью monit.
Поддержка anyservice встроена в EPM, и отдельно его лучше не использовать.
Установка на любую платформу:
# epm ei anyservice
Исходный код: https://github.com/Etersoft/anyservice
Пример использования с EPM
Достаточно поставить пакет anyservice и monit как всё заработает. Если в /lib/systemd/system нет файла сервиса, который пришёл с пакетом, нужно положить файл сервиса в /etc/anyservice.
Далее обычные команды:
- serv SERVICE on
- serv SERVICE status
Пример использования отдельно от EPM
1) Устанавливаем
# epm ei anyservice
2) Редактируем файл сервиса: /etc/anyservice/mysleep.service
[Unit] Description=run test sleep [Service] Type=simple PIDFile=/var/run/odoo.pid User=lav WorkingDirectory=/home/lav/odoo/ ExecStart=/home/lav/odoo/odoo.py Restart=always [Install] WantedBy=multi-user.target
3) Запускаем скрипт
# anyservice mysleep start
4) Доступные команды
anyservice --help anyservice <service file name> [start|stop|restart|status|summary|remove|list|on|off]
Описание работы скрипта
- Разбор конфига systemd
- Создание конфига для monit
При первичном запуске скрипт создает правило для monit'a на основании файла правила для systemd и помещает в стандартную для monit'а директорию /etc/monitrc.d . Более того, сам monit работает со службой через этот скрипт: запуски и остановки прописаны именно в anyservice. Никаких других конфигурационных файлов нет. Пишется pid-файл в /var/run.
- Запуск требуемого процесса через monit (используется start-stop-daemon)
При необходимости службу можно (пере)запускать командами anyservice <servicename> <action>. Стандартная оснастка (serv, service, init.d, rc.d) не вовлечена: anyservice работает независимо (нужно удостовериться, что сам monit корректно прописан в sysvinit).
Планы
- Добавить поддержку в epm
- Обеспечить пользователю возможность добавлять свои задания (что-то похожее на cron и crontab -e)
https://wiki.archlinux.org/index.php/Systemd/User
Ссылки
- Запуск сервиса под пользователем - описание решаемой проблемы
- Anyservice - гит репозиторий
Другие решения, не связанные с /sbin/init
- http://cr.yp.to/daemontools.html
- Process monitoring tool. Inspired from Bluepill and God. Requires Ruby(MRI) >= 1.9.3-p194
- http://habrahabr.ru/post/268583/ замена Supervisord на Systemd
- https://coreos.com/os/docs/latest/using-systemd-drop-in-units.html Замена дефолтных конфигов systemd
- https://wiki.archlinux.org/index.php/Systemd/User