Появилось у меня желание, держать 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 systemdman systemd.service- systemd на русском
- Systemd за пять минут
