systemd 是一种init的进化产品,大部分Linux发行版本都支持。
systemd 配置自启动时配置文件在usr/lib/systemd/system/ 文件夹下。
systemctl 为管理 systemd的工具。
一,使用systemctl配置tomcat
-
创建启动脚本
vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=tomcat
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/apache-tomcat-9.0.34/bin/startup.sh
ExecReload=
ExecStop=/usr/local/apache-tomcat-9.0.34/bin/shutdown.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
-
加载启动脚本
systemctl daemon-reload
-
查看系统文件是否被识别
systemctl list-unit-file --type=service | grep tomcat
-
设置开机自启
systemctl enable tomcat
-
常用操作
启动tomcat: systemctl start tomcat
关闭tomcat:systemctl stop tomcat
重启tomcat: systemctl restart tomcat
查看tomcat状态: systemctl status tomcat
-
查看服务日志
journalctl -xe
查看指定服务日志
journalctl -flu tomcat
二,可能遇到的错误
报错 control process exited code-exited status=203
解决方法:
- ExecStart参数指定启动脚本路径不对,会提示203错误,
可以将ExecStart,ExecReload,ExecStop的路径都拿出来执行下,保证路径没有写错 - 启动程序脚本(.sh文件)中未指定脚本解析器,会提示203错误,
在文件开头添加:#!/bin/sh - 启动程序脚本(.sh文件)没有执行权限,会提示203错误,
chmod +x myapp.sh - 如果启动脚本添加#!/bin/sh不生效,可以换成#!/bin/bash,或者在创建的tomca.service指定,如:
ExecStart=/bin/bash /usr/local/apache-tomcat-9.0.34/bin/startup.sh
三,启动脚本xx.service详解
[Unit]
Description= a sample thing
[Service]
type=simple
Restart=on-failure
ExecStart=/home/ubuntu/mimc-fast-aarch64
[Install]
WantedBy=multi-user.target
1. [Unit]
定义启动的顺序以及依赖的关系
| 可选项 | 描述 |
|---|---|
| Description | 主要是填写一些信息,用于当前服务的简单描述 |
| Documentation | 可以用来指定文档的位置,用于当前服务文档查询 |
| After | 可以指定在哪些服务之后进行启动 |
| Before | 可以指定在哪些服务之前进行启动 |
| Wants | 可以指定服务依赖于哪些服务(这种依赖是"弱依赖",即使所依赖的服务的启动情况不影响当前的服务是否启动) |
| Requires | 可以指定服务依赖于哪些服务(这种依赖是"强依赖",一旦所依赖的服务异常,当前的服务也随之停止) |
2. [Service]
定义启动、关闭和重启服务等操作时的方式
| 可选项 | 描述 |
|---|---|
| EnvironmentFile | 用来指定当前服务启动的环境变量 以路径的形式在文件中用key=value 的形式写入 读取时可以使用$key来读取 |
| ExecStart | 指定服务启动时执行的命令 |
| ExecStop | 指定服务停止时执行的命令 |
| ExecReload | 指定服务重启时执行的命令 |
| ExecStartPre | 指定服务启动之前执行的命令 |
| ExecStartPost | 指定服务启动之后执行的命令 |
| ExecStopPost | 指定服务停止之后执行的命令 |
| RestartSec | 指定服务在重启前等待的时间(单位为 “秒”) |
| Type | 指定启动类型:见下方Type |
| Restart | 指定重启时的类型:见下方Restart |
| KillMode | 指定停止的方式:见下方KillMode |
| PrivateTmp | 是否使用私有的tmp目录 |
-
[Type]
| 可选项 | 描述 |
|---|---|
| simple | 指定ExecStart字段的进程为主进程 |
| forking | 指定以fork() 子进程执行ExecStart字段的进程 |
| oneshot | 执行一次 |
| notify | 启动后发送会发送通知信号通知systemd |
| idle | 等其他任务结束后才运行 |
-
[Restart]
| 可选项 | 描述 |
|---|---|
| no | 退出后不会重启 |
| on-success | 当进程正常退出时(退出码为0) 执行重启 |
| on-failure | 当进程不正常退出时(退出码不为0) 执行重启 |
| on-abnormal | 当被信号终止和超时执行重启 |
| on-abort | 当收到没有捕捉到的信号终止时执行重启 |
| on-watchdog | 当看门狗超时时执行重启 |
| always | 一直重启 |
-
[KillMode]
| 可选项 | 描述 |
|---|---|
| control-group | 杀掉当前进程中所有的进程 |
| process | 杀掉当前进程的主进程 |
| mixed | 主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号 |
| none | 不杀掉任何进程 |
3. [Install]
定义安装配置文件(开机自启动必备)
| 可选项 | 描述 |
|---|---|
| WantedBy | 表示该服务所在的 Target(一般写 multi-user.target) |