Administrator
发布于 2025-08-08 / 3 阅读
0
0

systemctl教程

systemctl 是 Linux 系统中用于管理 systemd 服务的核心命令行工具,用于控制系统服务的启动、停止、重启、查看状态等,是管理系统服务的标准方式(替代了传统的 servicechkconfig 命令)。

一、基本语法

systemctl [选项] 服务名.service
  • 服务名后的 .service 可省略(如 systemctl start nginx 等同于 systemctl start nginx.service)。

二、常用命令

1. 服务状态管理

命令

功能

示例

start

启动服务

systemctl start nginx(启动 Nginx 服务)

stop

停止服务

systemctl stop nginx(停止 Nginx 服务)

restart

重启服务(先停后启)

systemctl restart nginx

reload

重新加载配置(不中断服务)

systemctl reload nginx(适合配置文件修改后)

status

查看服务状态

systemctl status nginx

status 输出解读

  • 若显示 active (running) 表示服务正常运行;

  • 若显示 inactive (dead) 表示服务已停止;

  • 若显示 failed 表示服务启动失败(会显示错误原因)。

2. 开机自启管理

命令

功能

示例

enable

启用开机自启

systemctl enable nginx

disable

禁用开机自启

systemctl disable nginx

is-enabled

查看是否开机自启

systemctl is-enabled nginx(输出 enableddisabled

3. 查看所有服务状态

# 查看所有已加载的服务(精简版)
systemctl list-units --type=service
​
# 查看所有服务(包括未加载的,详细版)
systemctl list-unit-files --type=service
​
# 过滤运行中的服务
systemctl list-units --type=service --state=running

4. 系统状态控制

systemctl 还可控制整个系统的运行级别(如关机、重启):

命令

功能

systemctl reboot

重启系统

systemctl poweroff

关闭系统

systemctl halt

暂停系统(需手动断电)

systemctl suspend

进入休眠模式

systemctl hibernate

进入冬眠模式(保存内存到磁盘)

5. 其他实用命令

  • 查看服务依赖关系:

    systemctl list-dependencies nginx  # 查看 nginx 依赖的服务
  • 屏蔽 / 解除屏蔽服务(禁止手动或自动启动):

    systemctl mask nginx       # 屏蔽服务(比 disable 更彻底)
    systemctl unmask nginx     # 解除屏蔽

6.服务脚本示例及参数详解

  • 服务脚本示例

    # 编写服务化脚本
    cat << EOF> /etc/systemd/system/redis.service
    [Unit]
    Description=NGINX Web Server
    Documentation=http://nginx.org/en/docs/
    After=network.target remote-fs.target nss-lookup.target
    ​
    [Service]
    Type=forking
    PIDFile=/run/nginx.pid
    ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/bin/kill -s TERM $MAINPID
    User=nginx
    Group=nginx
    Restart=on-failure
    RestartSec=5s
    ​
    [Install]
    WantedBy=multi-user.target
    EOF
    ​
    # 启动redis服务
    systemctl start redis
    ​
    # 设置开机启动
    systemctl enable redis
    ​
    # 立即启动并开机启动
    # systemctl enable redis --now
  • 参数详解

    • [Unit] 段:定义服务元信息与依赖

      参数

      说明

      Description

      服务的简短描述(systemctl status 时显示)。

      Documentation

      服务文档的 URL 或路径(如官方文档)。

      After

      定义服务启动顺序,需在指定服务(如 network.target)之后启动。

      Before

      After 相反,指定本服务启动后再启动其他服务。

      Requires

      强依赖:依赖的服务必须启动,若依赖失败,本服务也启动失败。

      Wants

      弱依赖:依赖的服务尽量启动,若依赖失败,本服务仍可启动(常用)。

      Conflicts

      冲突服务:指定服务启动时,本服务必须停止。

    • [Service] 段:定义服务运行参数(核心)

      参数

      说明

      Type

      服务启动类型(决定 systemd 如何判断服务是否启动完成): - simple(默认):ExecStart 启动的程序即为主进程,无需 PIDFile。 - forking:服务启动后会 fork 子进程,主进程退出(如 Nginx、Apache),需配合 PIDFile。 - oneshot:一次性任务(如初始化脚本),执行完后自动退出,常配合 RemainAfterExit=yes。 - notify:服务启动完成后会主动通知 systemd(需程序支持 sd_notify 机制)。

      PIDFile

      主进程 PID 文件路径(Type=forking 时必须指定,用于 systemd 识别进程)。

      ExecStart

      启动服务的命令(必填),如 /usr/sbin/nginx -c /etc/nginx/nginx.conf

      ExecReload

      重新加载配置的命令(如 systemctl reload 时执行),通常用 kill -HUP 发送信号。

      ExecStop

      停止服务的命令(systemctl stop 时执行),通常用 kill -TERM 终止进程。

      ExecStartPre

      ExecStart 执行前运行的命令(如预处理、检查)。

      ExecStartPost

      ExecStart 执行后运行的命令(如通知、日志记录)。

      User/Group

      服务运行的用户 / 用户组(避免用 root 运行,增强安全性)。

      WorkingDirectory

      服务运行的工作目录。

      Environment

      设置环境变量,如 Environment="PATH=/usr/local/bin"

      EnvironmentFile

      从文件加载环境变量(文件格式:KEY=VALUE),如 /etc/sysconfig/nginx

      Restart

      服务退出时是否自动重启: - no(默认):不重启。 - on-failure:非正常退出(退出码非 0)时重启。 - always:无论退出原因,始终重启(如关键服务)。 - on-abnormal:被信号终止或超时退出时重启。

      RestartSec

      自动重启前的等待时间(如 5s 表示 5 秒)。

      TimeoutStartSec

      启动超时时间(超过此时间视为启动失败,默认 90 秒)。

      TimeoutStopSec

      停止超时时间(超过此时间强制终止,默认 90 秒)。

      LimitNOFILE

      服务可打开的最大文件描述符数(如 65535,解决 “too many open files” 问题)。

    • [Install] 段:定义服务安装配置(开机自启相关)

      参数

      说明

      WantedBy

      服务被哪个目标(target)依赖,即开机自启时属于哪个运行级别: - multi-user.target:多用户命令行模式(最常用,服务器默认)。 - graphical.target:图形界面模式。 - 执行 systemctl enable 服务名 时,会在此目标下创建软链接。

      RequiredBy

      强依赖目标:目标启动时,本服务必须启动(较少用)。

      Alias

      服务的别名,可通过别名启动服务(如 Alias=webserver.service)。

三、注意事项

  1. 权限:管理系统服务通常需要 root 权限,普通用户需加 sudo(如 sudo systemctl start nginx)。

  2. 服务文件路径:系统服务的配置文件通常位于 /usr/lib/systemd/system//etc/systemd/system/(自定义服务)。

  3. 配置生效:修改服务配置文件后,需执行 systemctl daemon-reload 使配置生效。

systemctl 是 Linux 系统管理的核心工具,熟练掌握可高效管理服务生命周期和系统状态。


评论