Linux 服务 — systemd.unit

Table of Content

概括

通过<code>systemctl</code><code>命令可以对服务进行一些基本操作, 包括启动,停止,重启等, 而这条命令操作的服务的位置就在</code><code>/etc/systemd/system</code><code>目录下, 如果想要我们想要创建一个自己的服务用于开机自动运行, 只需要在这个目录下创建一个名为</code><code>{your service name}.service</code><code>的文本文件即可, 最简单的服务只需要在文件内写出</code><code>[Service]</code><code>部分中的</code><code>ExecStart</code>即可运行服务.

Linux服务

Linux服务一般通过<code>systemctl</code><code>进行管理, 诸如</code><code>systemctl start {service name}</code>启动某服务, 优点就是十分统一, 并且使得各种各样的服务有条理地运行, 不至于发生一个服务明明需要另一个服务的功能, 却在另一个服务运行之前启动, 造成启动失败或者异常.

<code>systemctl status {service name}</code><code>可以查看服务的状态, 同时会显示出服务最近的几行日志, 如果需要查看更多的日志, 可以使用</code><code>journalctl -u {service name}</code><code>, 其中</code><code>-u</code>参数是指定unit

service文件

常用的部分有三个:<code>Unit</code><code>, </code><code>Service</code><code>, </code><code>Install</code>

Unit

<code>Unit</code><code>部分是</code><code>systemctl</code><code>管理的众多模块的通用配置的部分, 这一部分可以写</code><code>Description</code><code>, </code><code>After</code><code>等. </code><code>Description</code><code>就是描述, 在</code><code>status</code><code>作为参数的时候可以在状态的部分看到这里写的描述; </code><code>After</code><code>就是指定服务启动的顺序, </code><code>systemd</code><code>会读取所有模块(Unit), 根据</code><code>Before</code><code>,</code><code>After</code><code>,</code><code>Require</code><code>等参数构造出一个不会对任何模块造成冲突的启动顺序, 然后依次启动服务, 对于</code><code>Require</code>等参数在前置服务启动失败时还可以指定特殊的行为

Service

这一部分就是服务的主体部分, 最最最重要的就是<code>ExecStart</code><code>参数, 即启动服务时运行的命令, 其他的诸如</code><code>ExecStop</code><code>,</code><code>ExecReload</code>等就是停止和启动服务时运行的命令.

另一个比较重要的参数就是<code>User</code>, 这个参数表示以特定用户的身份启动服务.

Install

这一部分是在服务需要开机启动时必须的项, 使用<code>systemctl enable {service name}</code> 可以使服务在开机时启动, 其实也就是在特定目录下创建一个指向服务文件的软链接

示例

[Unit]
Description=syncthing service for leafee98
After=network.target

[Service]
User=leafee98
ExecStart=/usr/bin/syncthing -no-browser -gui-address=0.0.0.0:8384 -home=/mnt/leafee98/syncthing/syncHome/

[Install]
WantedBy=multi-user.target

Leave a Reply

Your email address will not be published. Required fields are marked *




Enter Captcha Here :