概述
CentOS 7 使用 systemctl 管理服务,服务可分为系统服务和用户服务。
- 系统服务跟随系统的运行而运行,既开机自启动服务。
- 用户服务在当前用户登录系统后开发运行。
系统服务和用户服务分别存放与以下两个目录
- 系统服务:
/usr/lib/systemd/system - 用户服务:
/usr/lib/systemd/user
CentOS 7 服务文件需命名为扩展名为service文件,该文件主要由以下三部分组成,格式如下
[Unit]
Description=Tomcat Service
[Service]
ExecStart= /startup.service
[Install]
WantedBy=multi-user.target
服务说明
[Unit]
用于设置服务描述信息、启动顺序、依赖关系,参数如下
| 选项 | 描述 |
|---|---|
| Description | 当前服务的描述信息 |
| Documentation | 关于该服务相关文档路径 |
| After | 定义在哪些服务之后启动 |
| Before | 定义在哪些服务之前启动 |
| Wants | 表示服务之间的依赖关系,该关系是弱依赖,即依赖服务启动成功与否,都不会影响该服务的启动 |
| Requires | 同Wants选项都表示服务依赖关系,该关系是强依赖,即依赖服务启动失败,该服务也启动失败。 |
[Service]
设置服务的启动方式、运行程序、运行用户、用户组等信息,具体情况如下:
| 选项 | 描述 |
|---|---|
| Type | 服务运行方式 |
| User | 运行服务的用户 |
| Group | 运行服务的用户组 |
| ExecStart | 要运行的程序 |
| ExecReload | 定义如何重启 |
| ExecStop | 定义如何停止服务 |
| ExecStartPre | 启动服务之前执行的命令 |
| ExecStartPost | 启动服务之后执行的命令 |
| ExecStopPost | 停止服务之后执行的命令 |
| PrivateTmp | 是否给服务分配独立的临时空间 |
| EnviromentFile | 配置服务环境参数文件 |
| RestartSec | 表示服务重启之前要等待时间,单位:秒 |
| PIDFile | 进程文件存放地址 |
| KillSignal | 停止信号量,通常为SIGNQUIT |
| TimeoutStopSec | 停止超时时间 |
| KillMode | 定义Systemd如何停止服务 |
| Restart | 服务退出后,定义Systemd的重启方式 |
注意
所有启动设置之前,都可以加上连词号(
-),表示抑制错误。即发生错误的时候,不影响其他命令的执行。
Type
| 选项 | 描述 |
|---|---|
| simple | ExecStart以进行方式运行程序,默认值 |
| forking | ExecStart以fork()方式启动,此时父进程将会退出,子进程将成为主进程。 |
| oneshot | 类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务 |
| dbus | 类似于simple,但会等待 D-Bus 信号后启动 |
| notify | 类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务 |
| idle | 类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合 |
KillMode
| 选项 | 描述 |
|---|---|
| control-group | 当前控制组里面的所有子进程,都会被杀掉,默认值 |
| process | 只杀主进程 |
| mixed | 主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号 |
| none | 没有进程会被杀掉,只是执行服务的 stop 命令 |
Restart
| 选项 | 描述 |
|---|---|
| no | 退出后不会重启 |
| on-success | 只有正常退出时(退出状态码为0),才会重启 |
| on-failure | 非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启 |
| on-abnormal | 只有被信号终止和超时,才会重启 |
| on-abort | 只有在收到没有捕捉到的信号终止时,才会重启 |
| on-watchdog | 超时退出,才会重启 |
| always | 不管是什么退出原因,总是重启 |
[Install]
定义如何安装这个配置文件,即怎样做到开机启动。
WantedBy表示服务所在的Target,Target的含义是服务组,表示一组服务,它可以设置的值如下:
| 选项 | 描述 |
|---|---|
| multi-user.target | 表示多用户命令行状态 |
| graphical.target | 表示图形用户状态,它依赖于multi-user.target |
Example
[Unit]
Description=Apache Tomcat 9 Web Service,AS Coding4fun Service
Apter=network.target
[Service]
Type=forking
PIDFile=/var/run/tomcat9_1.pid
Environment=JAVA_HOME=/coding4fun/application/jdk1.8.0_261
Environment=CATALINA_PID=/var/run/tomcat9_1.pid
Environment=CATALINA_HOME=/coding4fun/application/tomcat9/tomcat9.0.37
Environment=CATALINA_BASE=/coding4fun/application/tomcat9/instances/instance1
ExecStart=$CATALINA_HOEM/bin/jsvc \
-server \
-classpath $CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/tomcat-juli.jar \
-outfile /coding4fun/logs/tomcat9/instance1/catalina.out \
-errfile /coding4fun/logs/tomcat9/instance1/catalina.err \
-Djava.library.path=/usr/local/apr/lib \
-Dcatalina.home=$CATALINA_HOME \
-Dcatalina.base=$CATALINA_BASE \
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties \
org.apache.catalina.startup.Bootstrap
ExecStop=$CATALINA_HOME/bin/jsvc \
-pidfile /var/run/tomcat9_1.pid \
-stop \
org.apache.catalina.startup.Bootstrap
[Install]
WantedBy=multi-user.target