systemd控制系统服务,更加简单,以前启动服务需要 service xxxx start|stop等。现在需要的是systemctl start|stop xxx。比如我配置的启动tomcat,systemctl start tomcat。十分方便。
服务创建过程
- 创建服务脚本
vim /etc/systemd/system/gitea.service #注意最后面的gitea.service修改为你的服务名.service
- 写入
1024s.cn 配置项
[Unit]
Description=Gitea
After=mysql.service
[Service]
Type=simple
RestartSec=2s
User=root
Group=root
WorkingDirectory=/opt/Gitea
ExecStart=/opt/Gitea/gitea web
Restart=always
Enviroment=User=root Home=/opt/Gitea
[Install]
WantedBy=mult-user.target
保存并退出
3. 重载并启用服务
chmod+x #加权限
systemctl daemon-reload #重载
systemctl start gitea.service #启动服务
经过上面的操作我们就为一个程序谢了一个服务脚本我们可以通过systemctl status gitea.service
命令来查看这个程序的相关状态了。
配置详解
- [Unit]: unit 本身的说明,以及与其他相依 daemon 的设置,包括在什么服务之后才启动此 unit 之类的设置值
- [Service], [Socket], [Timer], [Mount], [Path]..:不同的 unit type 就得要使用相对应的设置项目。我们拿的是 sshd.service 来当范本,所以这边就使用 [Service] 来设置。 这个项目内主要在规范服务启动的脚本、环境配置文件文件名、重新启动的方式等等。
- [Install]:这个项目就是将此 unit 安装到哪个 target 里面去的意思!
每个部分中的设置详细介绍:
[Unit] 部份 | |
---|---|
设置参数 | 参数意义说明 |
Description | 就是当我们使用 systemctl list-units 时,会输出给管理员看的简易说明!当然,使用 systemctl status 输出的此 |
Documentation | 这个项目在提供管理员能够进行进一步的文件查询的功能!提供的文件可以是如下的数据:Documentation=http://www…. Documentation=man:sshd(8) Documentation=file:/etc/ssh/sshd_config |
After | 说明此 unit 是在哪个 daemon 启动之后才启动的意思!基本上仅是说明服务启动的顺序而已,并没有强制要求里头的服务一定要启动后此 unit 才能启动。 以 sshd.service 的内容为例,该文件提到 After 后面有 network.target 以及 sshd-keygen.service,但是若这两个 unit 没有启动而强制启动 sshd.service 的话, 那么 sshd.service 应该还是能够启动的!这与 Requires 的设置是有差异的喔! |
Before | 与 After 的意义相反,是在什么服务启动前最好启动这个服务的意思。不过这仅是规范服务启动的顺序,并非强制要求的意思。 |
Requires | 明确的定义此 unit 需要在哪个 daemon 启动后才能够启动!就是设置相依服务啦!如果在此项设置的前导服务没有启动,那么此 unit 就不会被启动! |
Wants | 与 Requires 刚好相反,规范的是这个 unit 之后最好还要启动什么服务比较好的意思!不过,并没有明确的规范就是了!主要的目的是希望创建让使用者比较好操作的环境。 因此,这个 Wants 后面接的服务如果没有启动,其实不会影响到这个 unit 本身! |
Conflicts | 代表冲突的服务!亦即这个项目后面接的服务如果有启动,那么我们这个 unit 本身就不能启动!我们 unit 有启动,则此项目后的服务就不能启动! 反正就是冲突性的检 |
[Service] 部份 | |
---|---|
设置参数 | 参数意义说明 |
Type | 说明这个 daemon 启动的方式,会影响到 ExecSta |
EnvironmentFile | 可以指定启动脚本的环境配置文件!例如 sshd.service 的配置文件写入到 /etc/sysconfig/sshd 当中!你也可以使用 Environment= 后面接多个不同的 Shell 变量来给予设置! |
ExecStart | 就是实际执行此 daemon 的指令或脚本程序。你也可以使用 ExecStartPre (之前) 以及 ExecStartPost |
ExecStop | 与 systemctl stop 的执行有关,关闭此服务时所进行的指令。 |
ExecReload | 与 systemctl reload 有关的指令行为 |
Restart | 当设置 Restart=1 时,则当此 daemon 服务终止后,会再次的启动此服务。举例来说,如果你在 tty2 使用文字界面登陆,操作完毕后登出,基本上,这个时候 tty2 就已经结束服务了。 但是你会看到屏幕又立刻产生一个新的 tty2 的登陆画面等待你的登陆!那就是 Restart 的功能!除非使用 systemctl 强制将此服务关闭,否则这个服务会源源不绝的一直重复产生! |
RemainAfterExit | 当设置为 RemainAfterExit=1 时,则当这个 daemon 所属的所有程序都终止之后,此服务会再尝试启动。这对于 Type=oneshot 的服务很有帮助! |
TimeoutSec | 若这个服务在启动或者是关闭时,因为某些缘故导致无法顺利“正常启动或正常结束”的情况下,则我们要等多久才进入“强制结束”的状态! |
KillMode | 可以是 process, control- |
RestartS |
与 Restart 有点相关性,如果这个服务被关闭,然后需要重新启动时,大概要 sleep 多少时间再重新启动的意思。默认是 100ms (毫秒)。 |
[Install] 部份 | |
---|---|
设置参数 | 参数意义说明 |
WantedBy | 这个设置后面接的大部分是 *.target unit !意思是,这个 unit 本身是附挂在哪一个 target unit 下面的!一般来说,大多的服务性质的 unit 都是附挂在 multi-user.target 下面! |
Also | 当目前这个 unit 本身被 enable 时,Also 后面接的 unit 也请 enable 的意思!也就是具有相依性的服务可以写在这里呢! |
Alias | 进行一个链接的别名的意思!当 systemctl enable 相关的服务时,则此服务会进行链接文件的创建!以 multi-user.target 为例,这个家伙是用来作为默认操作环境 default.target 的规划, 因此当你设置用成 default.target 时,这个 /etc/systemd/system/default.target 就会链接到 /usr/lib/systemd/system/multi-user.target 啰! |
Systemctl相关命令解释
systemctl is-enabled servi1024s.cn cename.service #查询服务是否开机启动
systemctl enable *.service #开机运行服务
systemctl disable *.service #取消开机运行
systemctl start *.service #启动服务
systemctl stop *.service #停止服务
systemctl restart *.service #重启服务
systemctl本文来自:1024s.cn reload *.service #重新加载服务配置文件
systemctl status *.service #查询服务运行状态
systemctl --failed #显示启动失败的服务