1、Systemd服务 脚本一般存放在:/usr/lib/systemd 目录下, 目录下又有user和system之分
/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