当用户空间引导程序 systemV init 被 systemd 所取代, centos 7 下操纵与查看 daemon service 的命令也随之而改变; 不过, 由于 systemd 的庞大复杂, 命令选项繁多, 本文对 systemd 的整理主要集中于与 sysvinit 所提供的功能重合度最高的 systemctl 命令;
传统的 sysvinit 相关命令 与传统的 systemV init 引导程序相匹配的 daemon service 操纵命令主要是 service 与 chkconfig/ntsysv; 其中: service 命令用于 启, 停, 查看 具体的 daemon service; chkconfig 命令用于 修改, 查看 具体 daemon service 的 runlevel 及启停信息; ntsysv 命令提供了一个 GUI 界面用于操纵各个 runlevel 上各 daemon service 的启停;
service 的使用方式 1 2 3 4 5 sudo service ntpd start sudo service ntpd stop sudo service ntpd restart sudo service ntpd status
chkconfig 的使用方式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 sudo chkconfig --list > sudo chkconfig --list ntpd ntpd 0:on 1:on 2:on 3:on 4:on 5:on 6:off sudo chkconfig --add mysqld sudo chkconfig mysqld on sudo chkconfig --level 35 mysqld on sudo chkconfig --del rngd
ntsysv 的使用方式 ntsysv 在 centos 7 之前的各发行版本上都默认安装, 不过从 centos 7 之后, 该命令的 GUI 形式已经不再默认提供, 只提供了 chkconfig 命令用于兼容照顾老的 systemV init 方式;
1 2 3 4 sudo ntsysv sudo ntsysv --level 5
主流的 systemd 相关命令 systemd 相比 sysvinit 就要复杂多了, 同时也比 sysvinit 强大多了; systemd 相比 sysvinit 更强大的其中一个重要点是, systemd 不仅仅管理系统中的各进程, 它管理 linux 系统中的所有资源, 并把不同的资源称为 unit:
1 2 3 4 5 6 7 8 9 10 11 12 service unit: 系统服务 target unit: 多个 unit 构成的一个组 device unit: 硬件设备 mount unit: 文件系统的挂载点 automount unit: 自动挂载点 path unit: 文件或路径 scope unit: 不是由 systemd 启动的外部进程 slice unit: 进程组 snapshot unit: systemd 快照, 可以切回某个快照 socket unit: 进程间通信的 socket swap unit: swap 文件 timer unit: 定时器, 可与 crond 相对比, 可圈可点
其中, service unit 在 12 类 unit 中是最主要的一类, 也是日常操作中最频繁接触的一类, 当然也是与传统的 sysvinit 可以直接比较的对象; 另外, systemd 里另外一个比较有意思的是 timer unit, 关于此的详细内容可以参见: systemd 的定时器功能 ; systemd 主要涉及到的命令有: systemctl
, hostnamectl
, localectl
, timedatectl
, loginctl
, journalctl
等, 其中:
systemctl
是最重要的命令, 最核心的操作都与此命令有关, 比如启停服务, 管理各 unit 等;
hostnamectl
用于管理主机信息等;
localectl
用于本地化设置管理;
timedatectl
用于时区管理;
loginctl
用于管理当前登录的用户;
journalctl
用于管理 systemd 与各 unit 的输出日志, 用于辅助其余命令查看状态与日志;
本主要整理与 systemctl 有关的内容, 其余的如 timedatectl, journalctl 请参见另一篇文章: sysvinit / systemd 日志系统的使用与对比 ;
systemctl 的常用命令列表 systemctl 的使用场景十分广泛, 从大的角度来说, 可以分为 系统管理 和 unit 管理 两大类; 系统管理类的命令如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 sudo systemctl reboot sudo systemctl poweroff sudo systemctl halt sudo systemctl suspend sudo systemctl hibernate sudo systemctl hybrid-sleep sudo systemctl rescue
unit 管理类 的命令种类繁多, 大致可以再细分为两小类: 查看管理类 与 操纵动作类 ;查看管理类仅仅是统计与查看, 并不改变 unit 的状态: (1) 从整体角度管理 units
1 2 3 4 5 6 7 8 9 10 sudo systemctl list-units sudo systemctl list-units --all sudo systemctl list-units --all --state=inactive sudo systemctl list-units --failed sudo systemctl list-units --type =service
(2) 管理具体的某个 unit
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 sudo systemctl status rsyslog.service sudo systemctl is-active rsyslog.service sudo systemctl is-failed rsyslog.service sudo systemctl is-enabled rsyslog.service sudo systemctl list-dependencies --all rsyslog.service sudo systemctl show rsyslog.service sudo systemctl show -p CPUShares rsyslog.service
操纵动作类, 主要是针对 service unit:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 sudo systemctl enable nginx.service sudo systemctl start nginx.service sudo systemctl stop nginx.service sudo systemctl restart nginx.service sudo systemctl kill nginx.service sudo systemctl reload nginx.service sudo systemctl set -property nginx.service CPUShares=500
systemctl 的状态与诊断 使用 systemctl status 输出服务详情状态:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 > sudo systemctl status rsyslog.service ● rsyslog.service - System Logging Service Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2017-07-19 16:01:19 CST; 6 months 10 days ago Main PID: 504 (rsyslogd) CGroup: /system.slice/rsyslog.service └─504 /usr/sbin/rsyslogd -n Jul 19 16:01:19 localhost.localdomain systemd[1]: Starting System Logging Service... Jul 19 16:01:19 localhost.localdomain systemd[1]: Started System Logging Service.
使用 journalctl 查看日志:
1 2 3 4 5 6 7 8 9 10 sudo journalctl -u nagios sudo journalctl -u nagios -S "2017-04-19 09:00:00" sudo journalctl -u nagios -S "2 days ago" sudo journalctl -u nagios -U "2017-12-31 23:59:59" sudo journalctl -u nagios -b [-0] sudo journalctl -u nagios -b -1 sudo journalctl -u nagios -b -2
关于 journalctl 的详细内容, 请参见另外一篇文章: sysvinit / systemd 日志系统的使用与对比 ;
站内相关文章
参考链接