内容简介:Simple library for notifying systemd about process state.Just add this to your
systemd
Simple library for notifying systemd about process state.
Features
NOTIFY_SOCKET journal
Installation
Just add this to your rebar.config :
{deps, [systemd]}.
Or in case of Mix project, to your mix.exs :
defp deps do
[
{:systemd, "~> 0.2"}
]
end
Then call systemd:notify(ready) when your application is ready to work/accept connections.
Non-systemd systems
This application and all functions within are safe to call even in non-systemd and non-Linux OSes. In case if there is no systemd configuration options then all functions will simply work as (almost) no-ops.
Usage
Assuming you have my_app.service unit like that
[Unit] Description=My Awesome App [Service] User=appuser Group=appgroup Type=notify # Important! This need to run in foreground and not fork. # Check documentation of your release tool. ExecStart=/path/to/my_app start WatchdogSec=10s NotifyAccess=main Restart=on-failure [Install] WantedBy=multi-user.target
(the Type=notify part is important)
You can inform systemd about state of your application. To do so just call:
systemd:notify(ready).
This will make systemctl start my_app.service to wait until application is up and running.
If you want to restart your application you can notify systemd about it with:
systemd:notify(reloading).
Message about application shutting down will be handled automatically for you.
Logs
To handle logs you have 2 possible options:
- Output data to standard error with special prefixes. This approach is much simpler and straightforward, however do not support structured logging and multiline messages.
- Use datagram socket with special communication protocol. This requires a little bit more effort to set up, but seamlessly supports structured logging and multiline messages.
This library supports both formats, and it is up to You which one (or both?) your app will decide to use.
Standard error
There is systemd_stderr_formatter which can be used with any logger that outputs to standard error, for example logger_std_h . So to use this format it is the best to define in your sys.config :
[
{kernel,
[{logger,
[{handler, default, logger_std_h, #{formatter => {systemd_stderr_formatter, #{}},
type => standard_error}}]
}}}
].
This will add required prefixes automatically for you.
Datagram socket
This one requires systemd application to be started to spawn some processes required for handling sockets, so the best way to handle it is to add predefined systemd handlers after your application starts:
logger:add_handlers(systemd).
Be aware that this one is not guaranteed to work on non-systemd systems, so if You aren't sure if that application will be ran on systemd-enabled OS then you shouldn't use it as an only logger solution in your application or you can end with no logger attached at all.
License
See LICENSE .
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
程序员代码面试指南:IT名企算法与数据结构题目最优解
左程云 / 电子工业出版社 / 2015-9 / 79.00元
这是一本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现。针对当前程序员面试缺乏权威题目汇总这一痛点,本书选取将近200道真实出现过的经典代码面试题,帮助广大程序员的面试准备做到万无一失。“刷”完本书后,你就是“题王”!__eol__本书采用题目+解答的方式组织内容,并把面试题类型相近或者解法相近的题目尽量放在一起,读者在学习本书时很容易看出面试题解法之间的联......一起来看看 《程序员代码面试指南:IT名企算法与数据结构题目最优解》 这本书的介绍吧!