<返回更多

如何在Linux上创建Systemd服务

2023-02-01  今日头条  提燈人
加入收藏

如何创建Systemd服务

1、Systemd服务 脚本一般存放在:/usr/lib/systemd 目录下, 目录下又有usersystem之分

/usr/lib/systemd/system # 系统服务,开机不需要登录就能运行的程序(相当于开机自启)
/usr/lib/systemd/user # 用户服务,需要登录后才能运行的程序

2、在/usr/lib/systemd/system或/usr/lib/systemd/user创建“your-service.service”文件并写入如下示例

[Unit]
Description=<description about this service>

[Service]
User=<user e.g. root>
WorkingDirectory=<directory_of_script e.g. /root>
ExecStart=<script which needs to be executed>
Restart=always

[Install]
WantedBy=multi-user.target

3、保存后执行:

sudo systemctl daemon-reload #重新加载服务

4、启动服务:

sudo systemctl start your-service.service

5、查看服务状态:

sudo systemctl status your-service.service

6、设置服务开启启动:

sudo systemctl enable your-service.service

7、停止服务:

sudo systemctl disable your-service.service

脚本参数说明

[Unit]模块参数

Description

简单的服务描述

Documentation

文档链接,多个文档用空格隔开,支持以下协议文档http://, https://, file:, info:, man:.

Requires

配置需要依赖的服务。如果本服务已经启动,那么依赖服务肯定也已经全部启动。如果依赖服务中有任何一个服务启动失败,那么systemd不会启动本服务。多个依赖服务用空格隔开。

Wants

与Requires类似,但是这里设定的服务启动失败不会影响本服务启动。

BindsTo

与Requires类似,但是如果依赖服务关闭,那么本服务也会停止。

PartOf

与Requires类似,但是依赖服务停止和重启也同样会停止和重启本服务。

Conflicts

设定冲突服务,如果设定的服务已经启动,那么本服务将不会启动。多个服务用空格隔开。

Before, After

设定在本服务启动“前”、“后”需要启动的服务。多个服务用空格隔开。

OnFailure

设定如果本服务发生错误,需要启动的服务。多个服务用空格隔开。

[Service]模块参数

Type

字段定义启动类型。它可以设置的值如下。

RemainAfterExit

是否在服务所有进程都退出时还认为该服务在启动状态,默认为否。

GuessMainPID

A boolean value that specifies whether systemd should guess the main PID of a service if it cannot be determined reliably. This option is ignored unless Type=forking is set and PIDFile is not set. Defaults to yes.

PIDFile

设置一个绝对路径的文件来存储服务的PID。

An absolute filename pointing to the PID file of this daemon. Use of this option is recommended for services where Type=forking. Systemd reads the PID of the main process of the daemon after start-up of the service. Systemd does not write to the file configured here, although it removes the file after the service has shut down.

ExecStart

定义启动进程时执行的命令。

ExecStartPre, ExecStartPost

启动服务之前(之后)执行的命令。

ExecReload

重启服务时执行的命令。

ExecStop

停止服务时执行的命令。

ExecStopPost

停止服务之后执行的命令。

RestartSec

在重启服务之前等待时间。

TimeoutStartSec

等待服务启动的时间。

TimeoutStopSec

等待服务停止的时间。

TimeoutSec

该参数设置后同时设置TimeoutStartSec 和 TimeoutStopSec参数。

RuntimeMaxSec

服务最长启动时间。默认是无限制。

Restart

服务退出或者被kill掉后是否重新启动

WorkingDirectory

指定服务执行的根目录

[Install]模块参数

WantedBy

通常是定义哪些target能够运行服务一般是multi-user.target

参考:

https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html

https://www.freedesktop.org/software/systemd/man/systemd.exec.html#WorkingDirectory=

https://docs.fedoraproject.org/en-US/quick-docs/understanding-and-administering-systemd/#_unit_parameters

所有参数设置参考:

https://www.freedesktop.org/software/systemd/man/systemd.directives.html

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>