Systemctl:找出哪些命令适用于服务

Ler*_*kes 10 systemd systemctl centos7

如何使用 systemctl 找出哪些命令适用于服务?

# systemctl reload nagios.service
failed to reload nagios.service: Job type reload is not applicable for unit nagios.service.
Run Code Online (Sandbox Code Playgroud)

使用 init.d,您可以在没有命令的情况下运行脚本并查看适用命令的使用信息:

# /etc/init.d/nagios 
Usage: /etc/init.d/nagios {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}
Run Code Online (Sandbox Code Playgroud)

Mit*_*tja 11

systemctl不像旧的初始化脚本。根据其man页面,它支持以下命令,类似于您正在搜索的 init-script 命令:

  • start 启动(激活)命令行上指定的一个或多个单元。
  • stop 停止(停用)在命令行上指定的一个或多个单元。
  • reload 要求命令行中列出的所有单元重新加载其配置。
  • restart重新启动命令行中指定的一个或多个单元。如果这些单元还没有运行,它们将被启动。
  • try-restart如果单元正在运行,则重新启动命令行上指定的一个或多个单元。如果单元没有运行,这没有任何作用。请注意,为了与 Red Hat init 脚本兼容,condrestart此命令等效于。
  • reload-or-restart如果他们支持,重新加载一个或多个单位。如果没有,请重新启动它们。如果这些单元还没有运行,它们将被启动。
  • reload-or-try-restart如果他们支持,重新加载一个或多个单位。如果没有,请重新启动它们。如果单元没有运行,这将不起作用。请注意,为了与 SysV init 脚本兼容,force-reload此命令等效于。

所以这组命令基本上可以归结为start,stopreload。由于startstop对于大多数服务类型都是必需的(并且您通常知道服务是否不支持其中之一),因此您唯一想知道的是给定服务是否支持reload

大多数情况下,您希望它重新加载或重新启动:systemctl reload-or-restart nagios然后使用。要真正找出为重新加载而执行的命令(如果有),您可以查看其服务文件。这通常可以在/lib/systemd/system/或中找到/usr/lib/systemd/system并被命名$SERVICENAME.service(在您的情况下nagios.service)。该文件包含用于启动、停止和可能重新加载服务的命令,即ExecStart,ExecStopExecReload。如果您对此感兴趣,可以执行 agrep ExecReload /lib/systemd/system/nagios.service来确定服务是否支持重新加载。

TL; 博士

systemctl基本上支持start,stopreload. 要了解服务是否支持重新加载,请尝试一下。如果您需要在脚本或其他内容中重新加载多个服务,请使用reload-or-restart,如果ExecReload存储了-command则重新加载服务,否则将重新启动它。