Появилось у меня желание, держать MailHog постоянно запущенным в системе. Первым желанием было запускать как всегда его через supervisord, но потом возникла мысль, что теперь у нас есть чудесный systemd создать сервис в котором ничуть не сложнее чем в супервайзере, но не надо плодить лишних сущностей.
Понятно, что всё ниже изложенное не относится только к приложениям написанным на Go.
Буду краток. В каталоге /etc/systemd/system
создаём файл с описанием сервиса mailhog.service
следующего содержания.
[Unit]
Description=Mailhog mail cather
After=network.target
[Service]
Type=simple
User=ivan
Group=ivan
ExecStart=/usr/local/bin/MailHog
Restart=always
[Install]
WantedBy=multi-user.target
В нём три секции [Unit]
, [Service]
, [Install]
и в каждой по чайной ложке параметров:
Description
- словесное описание сервисаAfter
- таргет после которого сервис можно стартовать. Т.е. после того, как сеть уже готова.Type
- этот параметр можно опустить, но явно укажем тип нашего сервиса.User
- пользователь, от имени которого запускается сервис.Group
- группа, под которой запускается сервис.ExecStart
- собственно путь к исполняемому файлу сервиса.Restart
- указываем, что в случае падения, сервис должен быть перезапущен в любом случае.WantedBy
- в каком случае надо запускать сервис.
После того, как описание сервера создано, надо его включить:
# systemctl enable mailhog
Created symlink from /etc/systemd/system/multi-user.target.wants/mailhog.service to /etc/systemd/system/mailhog.service.
И запустить:
sudo systemctl start mailhog
После этого можно полюбоваться на красивую статусную информацию о работе нашего сервиса:
systemctl status mailhog
● mailhog.service - Mailhog mail cather
Loaded: loaded (/etc/systemd/system/mailhog.service; enabled)
Active: active (running) since Ср 2016-04-06 10:52:24 MSK; 52s ago
Main PID: 30376 (MailHog)
CGroup: /system.slice/mailhog.service
└─30376 /usr/local/bin/MailHog
апр 06 10:52:24 bileter MailHog[30376]: 2016/04/06 10:52:24 Using in-memory storage
апр 06 10:52:24 bileter MailHog[30376]: 2016/04/06 10:52:24 [SMTP] Binding to address: 0.0.0.0:1025
апр 06 10:52:24 bileter MailHog[30376]: [HTTP] Binding to address: 0.0.0.0:8025
апр 06 10:52:24 bileter MailHog[30376]: 2016/04/06 10:52:24 Serving under http://0.0.0.0:8025/
апр 06 10:52:24 bileter MailHog[30376]: Creating API v1 with WebPath:
апр 06 10:52:24 bileter MailHog[30376]: Creating API v2 with WebPath:
апр 06 10:52:27 bileter MailHog[30376]: [APIv1] GET /api/v1/events
В качестве вишенки на торте: теперь нет нужды самостоятельно заниматься записью логов приложения. Достаточно писать их в stdout/stderr
и systemd
будет самостоятельно их передавать в journald
. Просмотреть логи сервиса можно командой
journalctl -u mailhog.service
Или ограничится только логами записанными начиная с запуска системы
journalctl -u mailhog.service -b
Что почитать?
Я не стану подробно расписывать красоты systemd об этом хватает статей.
man systemd
man systemd.service
- systemd на русском
- Systemd за пять минут