Systemd命令详解

Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置。

由来

  • 历史上,Linux 的启动一直采用init进程。
  • 下面的命令用来启动服务。

    1
    2
    3
    $ sudo /etc/init.d/apache2 start
    # 或者
    $ service apache2 start
  • 这种方法有两个缺点。

    • 一是启动时间长 init 进程是串行启动 只有前一个进程启动完 才会启动下一个进程
    • 二是启动脚本复杂 init 进程只是执行启动脚本 不管其他事情 脚本需要自己处理各种情况 这往往使得脚本变得很长

Systemd 概述

  • Systemd 就是为了解决这些问题而诞生的。它的设计目标是,为系统的启动和管理提供一套完整的解决方案。
  • 根据 Linux 惯例,字母 d 是守护进程(daemon)的缩写。 Systemd 这个名字的含义,就是它要守护整个系统。

Systemd 命令

  • 开机自启动 systemctl enable firewalld
  • 关闭自启动 systemctl disable firewalld
  • 检查服务状态 systemctl status firewalld
  • 检查发服务是否自启动 systemctl restart httpd.service
  • 检查服务是否激活 systemctl is-active firewalld
  • 显示所有已启动的服务 systemctl list-units --type=service
  • 锁定服务 systemctl mask firewalld
  • 解锁服务 systemctl unmask firewalld

  • 重载服务 systemctl daemon-reload

一个简单的服务脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[Unit]
# 服务描述
Description=Seafile hub
# 当前服务需要依赖于那些服务
After=network.target seafile.service

[Service]
# 启动命令
ExecStart=/home/netdisk/seafile-server-latest/seahub.sh start
# 停止命令
ExecStop=/home/netdisk/seafile-server-latest/seahub.sh stop
# 操作用户
User=root
Group=root
# 启动类型(只启动一次)
Type=oneshot
# 脚本退出后任然认为进程在运行
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

参考资料