systemd服务的添加
在linux的平时使用中,需要一些常驻后台的程序,这些为了方便操作可以将其作成一个systemd服务,通过systemd的操作命令进行管理。
systemd服务的目录/usr/lib/systemd/system
下添加test.service
1 | [Unit] |
- 开启:
systemctl start test
- 关闭:
systemctl stop test
添加环境变量
1 | [Service] |
systemctl --help
EnvironmentFile
关键字是在环境变量配置较多的情况下,可以编辑到一个文件通过该变量一次性导入,编辑文件的一行为一个环境变量的定义。
命令执行
ExecStart=
: 启动服务时执行的命令ExecStartPre=, ExecStartPost=
: 启动服务之前与之后执行的命令
在启动服务前执行的相关命令中,如果存在权限问题可以在执行命令前加+
,如ExecStartPre=+/bin/mkdir test
https://www.freedesktop.org/software/systemd/man/systemd.service.html#ExecStart=
Unit模板
模板文件的主要特点是,文件名以@
符号结尾,而启动的时候指定的Unit名称为模板名称附加一个参数字符串,比如test@.service
, 在服务启动时可以在@
后面放置一个用于区分服务实例的附加字符串参数,这样在参数将会传入到服务启动文件,在文件内部可以通过占位符%i
获取服务启动是传入的参数,从而达到启动多个服务实例的目的。
- 启动:
systemctl start test@1
这样1
将传入服务编辑文件,可以通过%i
传给服务启动的进程中
1 | [Unit] |
占位符 | 作用 |
---|---|
%n | 完整的 Unit 文件名字,包括 .service 后缀名 |
%m | 实际运行的节点的 Machine ID,适合用来做Etcd路径的一部分,例如 /machines/%m/units |
%b | 作用有点像 Machine ID,但这个值每次节点重启都会改变,称为 Boot ID |
%H | 实际运行节点的主机名 |
%p | Unit 文件名中在 @ 符号之前的部分,不包括 @ 符号 |
%i | Unit 文件名中在 @ 符号之后的部分,不包括 @ 符号和 .service 后缀名 |
参考
- 可能是史上最全面易懂的 Systemd 服务管理教程!( 强烈建议收藏 )
- How to set environment variable in systemd service?
- systemd.service 中文手册