Linux命令:systemctl命令详解
Lasted 2020-01-01 17:18:19
systemctl主要用于控制Systemd系统和管理系统中运行的服务。
Systemd是为了解决传统Linux系统中System V风格init进程管理的缺点而诞生,传统init进程启动时间长,只有前一个进程启动完才会启动下一个进程,启动脚本复杂,服务需要编写自己管理脚本。Systemd采用以下新技术:
- 将service、target、mount、timer、socket、swap等称为Unit。
- 采用Socket激活式与D-Bus激活式服务,以提高相互依赖的各服务的并行运行性能。
- 用cgroups代替进程ID来追踪进程,以此即使是两次fork之后生成的守护进程也不会脱离systemd的控制。
- 用target代替System V的运行级别(Runlevel),比如,SystemD的graphical.target相当于System V的init 5,multi-user.target相当于System V的init 3。
- 内置新的journald 日志管理系统。
- 引入localectl、timedatectl等新命令,系统配置更方便。
Systemd开发目标是最终代替现在常用的System V与BSD风格init程序。
Systemd已纳入众多Linux发行版的软件源中,比如Red Hat Enterprise Linux 7及后续版本,包括其派生品CentOS、Scientific Linux、Oracle Linux等。
语法格式
systemctl [OPTIONS...] COMMAND [NAME...]
常用命令
基础命令
1. 查看系统是否已经安装systemctl。
systemd --version
systemd 219 +PAM +AUDIT +SELINUX +IMA -APPARMOR ...whereis systemctl
systemctl: /usr/bin/systemctl /usr/share/man/man1/systemctl.1.gz
2. 查看服务启动时间。
systemd-analyze blame
5.963s dev-mapper-centos\x2droot.device 4.561s lvm2-monitor.service 3.007s NetworkManager-wait-online.service 1.900s network.service 1.857s tuned.service 1.346s firewalld.service 1.274s postfix.service 1.207s boot.mount 560ms polkit.service 512ms lvm2-pvscan@8:2.service
3. 查看严重消耗时间的服务树状表。
systemd-analyze critical-chain
The time after the unit is active or started is printed after the "@" character. The time the unit takes to start is printed after the "+" character. multi-user.target @15.357s └─tuned.service @13.500s +1.857s └─network.target @13.498s └─NetworkManager.service @9.800s +168ms └─network-pre.target @9.791s └─firewalld.service @8.438s +1.346s └─polkit.service @7.867s +560ms └─basic.target @7.855s └─sockets.target @7.855s └─dbus.socket @7.854s └─sysinit.target @7.849s └─systemd-update-utmp.service @7.821s +27ms └─auditd.service @7.506s +307ms └─systemd-tmpfiles-setup.service @7.228s +273ms └─rhel-import-state.service @6.790s +436ms └─local-fs.target @6.737s
4. 显示系统中所有可用的units。
systemctl list-unit-files
UNIT FILE STATE proc-sys-fs-binfmt_misc.automount static dev-hugepages.mount static dev-mqueue.mount static proc-sys-fs-binfmt_misc.mount static sys-fs-fuse-connections.mount static sys-kernel-config.mount static sys-kernel-debug.mount static tmp.mount disabled brandbot.path disabled ......
5. 显示所有正在运行的units。
systemctl list-units
UNIT LOAD ACTIVE SUB DESCRIPTION proc-sys-fs-binfmt_misc.automount loaded active waiting Arbitrary Executable File Formats File S -.mount loaded active mounted / boot.mount loaded active mounted /boot dev-hugepages.mount loaded active mounted Huge Pages File System dev-mqueue.mount loaded active mounted POSIX Message Queue File System systemd-ask-password-wall.path loaded active waiting Forward Password Requests to Wall Direct session-1.scope loaded active running Session 1 of user root crond.service loaded active running Command Scheduler dbus.service loaded active running D-Bus System Message Bus firewalld.service loaded active running firewalld - dynamic firewall daemon getty@tty1.service loaded active running Getty on tty1 ● kdump.service loaded failed failed Crash recovery kernel arming ......
6. 显示所有失败的units。
systemctl --failed
UNIT LOAD ACTIVE SUB DESCRIPTION ● kdump.service loaded failed failed Crash recovery kernel arming LOAD = Reflects whether the unit definition was properly loaded. ACTIVE = The high-level unit activation state, i.e. generalization of SUB. SUB = The low-level unit activation state, values depend on unit type. 1 loaded units listed. Pass --all to see loaded but inactive units, too. To show all installed unit files use 'systemctl list-unit-files'.
7. 检测某个Unit(cron.service)是否启动。
systemctl is-enabled crond.service
enabled
8. 检测某个Unit或者服务是否正在运行。
systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2019-12-31 18:06:27 CST; 22h ago Docs: man:firewalld(1) Main PID: 6519 (firewalld) CGroup: /system.slice/firewalld.service └─6519 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid Dec 31 18:06:25 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon... Dec 31 18:06:27 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.
使用Systemctl管理和控制服务
9. 显示所有服务(包括运行和关闭的服务)。
systemctl list-unit-files --type=service
UNIT FILE STATE auditd.service enabled autovt@.service enabled blk-availability.service disabled brandbot.service static console-getty.service disabled console-shell.service disabled container-getty@.service static cpupower.service disabled crond.service enabled ......
10. 在Linux中启动、重启、关闭、重新加载和检测服务(crond.service)的运行状态。
systemctl start crond.service systemctl restart crond.service systemctl stop crond.service systemctl reload crond.service systemctl status crond.service
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-01-01 16:49:29 CST; 3s ago
Main PID: 9249 (crond)
CGroup: /system.slice/crond.service
└─9249 /usr/sbin/crond -n
Jan 01 16:49:29 bogon systemd[1]: Started Command Scheduler.
Jan 01 16:49:29 bogon crond[9249]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 16% if used.)
Jan 01 16:49:30 bogon crond[9249]: (CRON) INFO (running with inotify support)
Jan 01 16:49:30 bogon crond[9249]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
Note: systemctl的start、restart、stop和reload命令不会输出任何信息,只有status会输出如上信息。
11. 设置开机启动或禁用服务。
systemctl is-active httpd.service systemctl enable httpd.service systemctl disable httpd.service
12. 注销(注销后服务不能启动)和取消注销服务。
systemctl mask httpd.service
Created symlink from /etc/systemd/system/httpd.service to /dev/null.systemctl unmask httpd.service
Removed symlink /etc/systemd/system/httpd.service.