一个程序的 Systemd 启动

在之前的文章里,我们了解了一个webhooks的使用。那么如何使用 Systemd 启动并守护webhooks呢。

一.部署应用

首先部署程序到指定的位置。

假设,我们的程序在/foo/bar/webhook,配置文件在/foo/bar/hooks.json.

编写systemd配置文件

我们在/etc/systemd/system文件夹中编写文件webhooks.service,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[Unit]
Description=webhooks https://github.com/adnanh/webhook
Wants=network-online.target
After=network.target
[Service]
Type=simple
ExecStart=/fool/bar/webhook -port 9001 -hooks /fool/bar/hooks.json -verbose -hotreload
Restart=always
User=root
Group=root
[Install]
WantedBy=multi-user.target
Alias=webhooks

配置文件解释

简单解释一下,上面的配置文件的几个参数。

Unit区块的Description字段,是服务的简单描述。

Service区块的字段含义如下。

  • ExecStart:启动命令
  • Restart:如何重启。always表示如果进程退出,总是重启
  • Type:启动方式。simple意思是Ctrl+c才能退出的程序。
  • User:以什么用户启动
  • Group:以什么组启动

Install区块的WantedBy字段指定,设为开机启动时,该服务所在的 Target 是multi-user.target。Alias别名字段是指命令启动该服务时可以不用webhooks.service直接用webhooks

启动服务

1
2
3
4
5
# 重载配置文件
$ sudo systemctl daemon-reload
# 启动服务
$ sudo systemctl start webhooks

查看状态

如果启动失败,或者想查看日志,就要执行下面的命令。

1
2
3
4
5
6
7
8
# 查看状态
$ sudo systemctl status webhooks
# 查看日志
$ sudo journalctl -u webhooks
# 实时输出最新日志
$ sudo journalctl -f -u webhooks

在shell中输入以下命令:

1
journalctl -f -u webhooks
1
curl http://127.0.0.1:9001/hooks/test_or_your_id

如果看到日志有响应则代表服务启动成功

重启服务和停止服务

1
2
3
4
5
# 重启服务
$ sudo systemctl restart webhooks
# 停止服务
$ sudo systemctl stop webhooks

如果想设为开机启动,就要执行systemctl enable。

1
$ sudo systemctl enable webhooks

如果要取消开机启动,就要执行systemctl disable。

1
$ sudo systemctl disable webhooks