如何使用 systemctl 查看 Linux 上服务的状态
我们使用systemdsystemctl status下的命令来查看 Linux 操作系统上给定服务的状态。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 是的 |
要求 | Linux 终端 |
类别 | 系统管理 |
先决条件 | systemd |
操作系统兼容性 | Alma • Arch • Debian • Fedora • Linux • Mint • openSUSE • Pop!_OS • RHEL • Rocky • Stream • SUSE • Ubuntu • WSL |
预计阅读时间 | 9 分钟 |
查看服务状态
systemctl 命令的语法如下。
请注意,该命令取代了早期版本没有 systemd 的 Linux 中使用的命令。$ systemctl status {service-name}
$ systemctl status {unit-name}
systemctl status {service-name}service {service-name} status
如何查看 nginx 服务的状态
输入以下命令查看 Nginx、Sshd 和 Lighttpd 服务器状态:
$ systemctl status nginx.service
## ssh server status ##
$ systemctl status sshd.service
## Lighttpd web server status ##
$ systemctl status lighttpd.service
● lighttpd.service - Lighttpd Daemon Loaded: loaded (/lib/systemd/system/lighttpd.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-08-04 04:29:19 UTC; 3 weeks 2 days ago Main PID: 105 (lighttpd) Tasks: 1 (limit: 115783) Memory: 56.5M CGroup: /system.slice/lighttpd.service └─105 /usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf Aug 04 04:29:19 utls-bash-wiki systemd[1]: Starting Lighttpd Daemon... Aug 04 04:29:19 utls-bash-wiki systemd[1]: Started Lighttpd Daemon.
点(“ ● ”)在支持的终端上使用颜色来一目了然地总结设备状态。白色表示“非活动”或“停用”状态。红色表示“失败”或“错误”状态。绿色表示“活动”、“重新加载”或“激活”状态。
了解 systemd 服务/单元状态
Linux 服务的状态取决于以下各种状态:
服务状态 | 描述 |
---|---|
活跃(运行) | 服务或守护进程在后台运行。 例如,sshd 或 nginx/apache Web 服务器以及传入流量列表。 |
活跃(退出) | 服务已成功从配置文件启动。 通常在退出服务之前读取一次服务配置。 例如,AppArmor 或防火墙服务。 |
活跃(等待) | 我们的服务正在运行,但正在等待诸如 CPUS/打印事件之类的事件。 |
不活跃 | 服务未运行。 |
已启用 | 服务在启动时启用。 |
已禁用 | 服务已禁用,并且不会在 Linux 服务器启动时启动。 |
静止的 | Linux 上无法启用服务,但大多数情况下由另一个 systemd 单元自动启动。换句话说,该单元文件未启用 ,并且在 [Install] 单元文件部分中没有允许的规定。 |
蒙面 | 服务已完全禁用,并且对其的任何启动操作始终会失败。 |
别名 | 服务名称是一个别名。它表示服务是另一个单元文件的符号链接。 |
链接 | 通过一个或多个符号链接到单元文件 (永久在 /etc/systemd/system/ 中或暂时在 /run/systemd/system/ 中) 即可使用,即使 单元文件可能位于单元文件搜索路径之外。 |
目前 systemd 支持以下单元
- service:systemd 控制和监督的进程的服务单元配置。
- mount:由 systemd 控制和监督的文件系统挂载点。
- swap:由 systemd 控制的交换文件/磁盘配置。
- socket:由 systemd 控制和监督的 IPC 或网络套接字或文件系统 FIFO,用于基于套接字的激活。
- target:它包含有关 systemd 目标单元的信息。它用于对单元进行分组,并作为启动期间的已知同步点。例如,graphical.target 用于基于 GUI 的桌面登录。类似地,multi-user.target 用于用户可以使用 ssh/console 登录的服务器。
- device:sysfs/udev 设备树中公开的设备单元。它包括网络和其他设备。
- automount:自动挂载文件系统
- timer:类似 systemd 单元的 cron,用于在给定的日期/时间格式运行命令和服务。例如,刷新固件或清理由 Python 或 PHP webapps 创建的会话。
- path:设置所有路径单元的 systemd 特殊目标单元。例如,systemd 可以根据文件系统路径采取某些操作。如果 /etc/foo/ 被修改,则采取某些操作。
- slice:我们使用 systemd 切片来隔离工作负载。它们定义了一个层次结构,其中放置了范围和服务。实际进程包含在范围或服务中。将其视为轻量级 Docker。对于每个切片,可以设置适用于所有进程的某些资源限制,例如 CPU 或磁盘 I/O 限制。
- scope:范围单元不是通过单元配置文件配置的,而是仅使用 systemd 的总线接口以编程方式创建的。它们的命名类似于文件名。名称以“.scope”结尾的单元指的是范围单元。范围单元管理一组系统进程。与服务单元不同,范围单元管理外部创建的进程,并且不会自行分叉进程。范围单元的主要目的是对系统服务的工作进程进行分组,以便组织和管理资源。
我们可以按如下方式列出所有服务单元:
$ sudo systemctl --type=service
想要查看挂载类型单元?尝试:
$ sudo systemctl --type=mount
显示 Linux 机器上的所有 systemd 计时器单元:
$ sudo systemctl -t timer
UNIT LOAD ACTIVE SUB DESCRIPTION ____________________________________________________________________________________________________________ anacron.timer loaded active waiting Trigger anacron every hour apt-daily-upgrade.timer loaded active waiting Daily apt upgrade and clean activities apt-daily.timer loaded active waiting Daily apt download activities e2scrub_all.timer loaded active waiting Periodic ext4 Online Metadata Check for All Filesystems fstrim.timer loaded active waiting Discard unused blocks once a week fwupd-refresh.timer loaded active waiting Refresh fwupd metadata regularly logrotate.timer loaded active waiting Daily rotation of log files man-db.timer loaded active waiting Daily man-db regeneration mdcheck_start.timer loaded active waiting MD array scrubbing mdmonitor-oneshot.timer loaded active waiting Reminder for degraded MD arrays motd-news.timer loaded active waiting Message of the Day phpsessionclean.timer loaded active waiting Clean PHP session files every 30 mins systemd-tmpfiles-clean.timer loaded active waiting Daily Cleanup of Temporary Directories 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. 13 loaded units listed. Pass --all to see loaded but inactive units, too.
要显示所有已安装的单元文件,请使用:
$ sudo systemctl list-unit-files
Linux查看某个服务的状态
键入以下命令来查看自启动以来 Linux 系统上的所有服务和单元状态:
$ sudo systemctl
$ sudo systemctl | grep ssh
$ sudo systemctl | egrep 'apache|nginx|lighttpd|php'
如何列出 systemd 当前内存中的单元
执行以下命令:
$ sudo systemctl list-units
$ sudo systemctl list-units | more
$ sudo systemctl list-units | grep sshd
## filter by unit types ##
$ sudo systemctl list-units --type service
$ sudo systemctl list-units --type timer
列出 systemd/systemctl Linux 上所有失败的单元/服务
$ sudo systemctl list-units --failed
$ sudo systemctl list-units --state failed
## filtering by unit type ##
$ sudo systemctl list-units --state failed --type service
$ sudo systemctl list-units --state failed --type timer
systemctl 命令选项列出所有失败的单元/服务
nginx等服务没有运行怎么办?
打开 systemd 服务:
$ sudo systemctl enable nginx.service
启动 nginx 服务:
$ sudo systemctl start nginx.service
我们可以按如下方式停止或重新启动服务:
验证服务是否启用,运行:
再次查看状态:
要查看调试服务问题的完整输出,请传递或选项:
我们可以使用 journalctl 命令调试并查看与服务相关的所有日志消息:
$ sudo systemctl stop nginx.service
$ sudo systemctl restart nginx.service
$ sudo systemctl is-enabled nginx.service
$ sudo systemctl status nginx.service
--full-l
$ sudo systemctl status nginx.service -l
$ sudo systemctl status openvpn.service --full
$ sudo journalctl UNIT=nginx.service
Aug 02 03:51:05 utls-wp-mg-www-cbz systemd[1]: Stopped A high performance web server and a reverse proxy server. Aug 02 03:51:15 utls-wp-mg-www-cbz systemd[1]: Starting A high performance web server and a reverse proxy server... Aug 02 03:51:15 utls-wp-mg-www-cbz systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE Aug 02 03:51:15 utls-wp-mg-www-cbz systemd[1]: nginx.service: Failed with result 'exit-code'. Aug 02 03:51:15 utls-wp-mg-www-cbz systemd[1]: Failed to start A high performance web server and a reverse proxy server. Aug 02 03:51:48 utls-wp-mg-www-cbz systemd[1]: Starting A high performance web server and a reverse proxy server... Aug 02 03:51:48 utls-wp-mg-www-cbz systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE Aug 02 03:51:48 utls-wp-mg-www-cbz systemd[1]: nginx.service: Failed with result 'exit-code'. Aug 02 03:51:48 utls-wp-mg-www-cbz systemd[1]: Failed to start A high performance web server and a reverse proxy server. Aug 02 03:52:07 utls-wp-mg-www-cbz systemd[1]: Starting A high performance web server and a reverse proxy server... Aug 02 03:52:07 utls-wp-mg-www-cbz systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE Aug 02 03:52:07 utls-wp-mg-www-cbz systemd[1]: nginx.service: Failed with result 'exit-code'. Aug 02 03:52:07 utls-wp-mg-www-cbz systemd[1]: Failed to start A high performance web server and a reverse proxy server. Aug 02 03:53:05 utls-wp-mg-www-cbz systemd[1]: Starting A high performance web server and a reverse proxy server... Aug 02 03:53:05 utls-wp-mg-www-cbz systemd[1]: Started A high performance web server and a reverse proxy server. Aug 04 04:11:47 utls-wp-mg-www-cbz systemd[1]: Stopping A high performance web server and a reverse proxy server... Aug 04 04:11:48 utls-wp-mg-www-cbz systemd[1]: nginx.service: Succeeded. Aug 04 04:11:48 utls-wp-mg-www-cbz systemd[1]: Stopped A high performance web server and a reverse proxy server. -- Reboot -- Aug 04 04:27:35 utls-wp-mg-www-cbz systemd[1]: Starting A high performance web server and a reverse proxy server... Aug 04 04:27:35 utls-wp-mg-www-cbz systemd[1]: Started A high performance web server and a reverse proxy server.
如何查看 systemd 服务/单元文件源
传递 cat 选项如下(类似于cat 命令):
$ sudo systemctl cat {service-name}
$ sudo systemctl cat nginx.service
/lib/systemd/system/nginx.service # Stop dance for nginx # ======================= # # ExecStop sends SIGSTOP (graceful stop) to the nginx process. # If, after 5s (--retry QUIT/5) nginx is still running, systemd takes control # and sends SIGTERM (fast shutdown) to the main process. # After another 5s (TimeoutStopSec=5), and if nginx is alive, systemd sends # SIGKILL to all the remaining processes in the process group (KillMode=mixed). # # nginx signals reference doc: # http://nginx.org/en/docs/control.html # [Unit] Description=A high performance web server and a reverse proxy server Documentation=man:nginx(8) After=network.target [Service] Type=forking PIDFile=/run/nginx.pid ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;' ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;' ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid TimeoutStopSec=5 KillMode=mixed [Install] WantedBy=multi-user.target
结论
您学习了如何使用 systemctl 命令列出 systemd 单元(包括 Linux 服务)。请参阅 systemctl文档或键入以下 man 命令或将 --help 选项传递给 systemctl:
$ man systemctl
$ systemctl --help