侧边栏壁纸
博主头像
随心记录

我与旧事归于尽,来年依旧迎花开!

  • 累计撰写 23 篇文章
  • 累计创建 1 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux注册应用为系统服务

晚来听风
2024-10-24 / 0 评论 / 0 点赞 / 1 阅读 / 0 字
温馨提示:
本文最后更新于2024-10-29,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Linux可以通过Systemd来将应用注册为系统服务。

什么是Systemd?

Systemd是一个系统和服务管理器,用于Linux操作系统,它提供了一种统一的方式来管理系统的进程和服务,Systemd使用服务单元文件(通常是.service文件)来定义服务的行为,包括如何启动、停止、重启服务,以及服务的依赖关系等。

Systemd 的单元文件通常存储在以下目录之一:

  1. /etc/systemd/system/:用于存放系统管理员创建的单元文件,这些文件会覆盖默认的单元文件。

  2. /usr/local/lib/systemd/system/:用于存放用户安装的软件包创建的单元文件。

  3. /lib/systemd/system/:用于存放默认的系统服务单元文件。

除了服务单元,systemd 还支持其他类型的单元文件,它们通常存放在以下目录:

  • /etc/systemd/system/:可以存放所有类型的单元文件,包括服务、挂载点、设备、套接字等。

  • /usr/lib/systemd/system/:存放默认的系统单元文件,如 systemd-logind.service

  • /lib/systemd/system-generators/:存放系统生成器,这些生成器可以自动创建单元文件。

  • /lib/systemd/system-preset/:存放预设脚本,这些脚本在系统启动时运行,用于启用或禁用单元文件。

  • /run/systemd/system/:临时单元文件,这些文件在系统重启后不会保留。

这里拿Caddy来做示例,首先将caddy的可执行文件放在/usr/bin/目录下,配置文件放在/etc/caddy/目录下,创建一个服务单元文件(caddy.service)

touch /lib/systemd/system/caddy.service

然后对caddy.service进行编辑,输入下面内容:

[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target

[Service]
Type=notify
User=caddy
Group=caddy
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile --force
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

下面是对每个部分的详细解释,具体支持的配置可以参考官方文档(https://www.freedesktop.org/software/systemd/man/latest/systemd.unit.html):

  1. [Unit] 部分

  • Description=Caddy: 服务的描述,这里指明了是Caddy服务。

  • Documentation=https://caddyserver.com/docs/: 提供了Caddy官方文档的链接,方便用户查阅更多信息。

  • After=network.target network-online.target: 指定Caddy服务依赖于网络服务和网络在线服务,这意味着Caddy服务将在这些服务启动后启动。

  • Requires=network-online.target: 表示Caddy服务需要网络在线服务,如果网络在线服务未启动,Caddy服务将不会启动。

  1. [Service] 部分

  • Type=notify: 指定服务类型为notify,这意味着systemd会等待服务发送一个通知信号,以确认服务已经准备好。

  • User=caddy: 指定服务运行的系统用户,这里使用了一个名为"caddy"的用户。

  • Group=caddy: 指定服务运行的系统组,这里使用了一个名为"caddy"的组。

  • ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile: 定义了服务启动时执行的命令,这里是Caddy的启动命令,指定了Caddy的可执行文件路径、环境变量的使用、以及配置文件的位置。

  • ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile --force: 当需要重新加载服务配置时执行的命令,这里使用了--force参数来强制重新加载配置。

  • TimeoutStopSec=5s: 服务停止时等待的超时时间,这里是5秒。

  • LimitNOFILE=1048576: 限制服务可以打开的最大文件数,这里是1048576。

  • LimitNPROC=512: 限制服务可以创建的进程数,这里是512。

  • PrivateTmp=true: 使得服务的临时文件目录私有化。

  • ProtectSystem=full: 保护系统文件不被服务修改。

  • AmbientCapabilities=CAP_NET_BIND_SERVICE: 给予服务绑定低编号端口(如80和443)的能力。

  1. [Install] 部分

  • WantedBy=multi-user.target: 指定这个服务单元应该被哪些目标单元激活。multi-user.target 表示在系统达到多用户状态时启动这个服务。

创建这个服务单元文件后,你可以使用systemd命令来管理Caddy服务,例如:

  • systemctl start caddy.service 启动Caddy服务。

  • systemctl stop caddy.service 停止Caddy服务。

  • systemctl reload caddy.service 重新加载Caddy配置。

  • systemctl enable caddy.service 使Caddy服务在系统启动时自动启动。

  • systemctl disable caddy.service 禁用Caddy服务在系统启动时自动启动。

0

评论区