简介
Linux服务管理常用的两种方式为service和systemctl。service的方式在许多机器上已经弃用,建议使用systemctl方式。
systemd是Linux系统最新的初始化系统(init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能并发启动更多进程。
systemctl命令用法
指令 | 功能 |
---|---|
systemctl list-unit-files | 获取所用可用单元 |
systemctl list-units | 获取所有运行中的单元 |
systemctl status service | 获取service的状态 |
systemctl start/stop/estart/reload service | 改变service 的状态 启动、重启、停止、重载服务 |
systemctl enable/disable service | 是否开机自启 |
systemctl kill service | 强制结束服务 |
systemctl daemon-reload | 刷新systemd的配置文件 |
编写一个服务
-
在
/lib/systemd/system/
文件目录下添加.service服务文件; -
编写.service文件
[Unit] Description=Redis In-Memory Data Store After=network.target [Service] ## Type=forking,可以理解为 systemd 是一个类似 supervise 的守护进程, ## forking 表示服务管理器是系统 init 的子进程,用于管理需要后台运行的服务 Type=forking ExecStart=/usr/local/bin/redis-server /path/to/redis.conf ExecStop=/usr/local/bin/redis-cli shutdown Restart=always [Install] WantedBy=multi-user.target
上面可以看出.serive文件包括三个部分:[Unit]、[Service]、[Install]。
-
[Unit]
指令 描述 Description 对当前服务的简单描述 After 指定serive在哪些服务之后进行启动 Before 指定serive在哪些服务之前进行启动 Requires 指定服务依赖于哪些服务( 强依赖关系
,一旦所依赖服务异常,当前服务随之停止)Wants 指定服务依赖于哪些服务( 弱依赖关系
,所依赖服务异常不影响当前服务运行) -
[Service]
指令 描述 Type 定义启动类型。可设置:simple,exec,forking,oneshot,dbus,notify,idle。 simple ExecStart 字段启动的进程为该服务的主进程 forking
ExecStart 字段的命令将以 fork() 方式启动,此时父进程将会退出,子进程将成为主进程 ExecStart 定义启动进程时执行的命令 ExecStop 停止服务时执行的命令 EnvironmentFile 环境配置文件,用来指定当前服务启动的环境变量 ExecReload 重启服务时执行的命令 ExecStartPre 启动服务之前执行的命令 ExecStartPost 启动服务之后执行的命令 ExecStopPost 停止服务之后执行的命令 RemainAfterExit 设为yes,表示进程退出以后,服务仍然保持执行 RestartSec 重启服务之前需要等待的秒数 -
KillMode:定义 Systemd 如何停止服务,可以设置的值如下:
-
control-group(默认值):当前控制组里面的所有子进程,都会被杀掉;
-
process:只杀主进程;
-
mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号;
-
none:没有进程会被杀掉。
-
-
Restart:定义了退出后,Systemd 的重启方式。可以设置的值如下:
-
no(默认值):退出后不会重启;
-
on-success:当进程正常退出时(退出状态码为0),才会重启;
-
on-failure:当进程非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启;
-
on-abnormal:当被信号终止和超时,才会重启;
-
on-abort:当收到没有捕捉到的信号终止时,才会重启;
-
on-watchdog:看门狗超时退出,才会重启;
-
always:总是重启。
-
-
-
[Install]
·Install一般填为
WantedBy=multi-user.target
,表示多用户环境下服务被启用。·