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

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

如何使用 systemctl 找出适用于某项服务的命令?

# systemctl reload nagios.service
failed to reload nagios.service: Job type reload is not applicable for unit nagios.service.

使用 init.d 您可以运行无需命令的脚本并查看适用命令的使用信息:

# /etc/init.d/nagios 
Usage: /etc/init.d/nagios {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}

答案1

systemctl不像旧的 init-scripts。根据其man页面及其源代码,它支持以下命令,这些命令类似于您正在搜索的 init-script 命令:

  • start 启动(激活)命令行中指定的一个或多个单元。
  • stop停止(停用)命令行中指定的一个或多个单元。
  • reload要求命令行上列出的所有单元重新加载其配置。
  • restart停止然后启动命令行中指定的一个或多个单元。如果这些单元尚未运行,则会启动它们。
  • try-restart如果单元正在运行,则停止然后启动命令行中指定的一个或多个单元。如果单元未运行,则此操作不执行任何操作。
  • reload-or-restart如果支持,请重新加载一个或多个单元。如果不支持,请停止它们,然后启动它们。如果单元尚未运行,则将启动它们。
  • try-reload-or-restart如果支持,则重新加载一个或多个单元。如果不支持,则停止它们,然后启动它们。如果单元未运行,则此操作不执行任何操作。

存在以下冗余别名,主要是由于遗留原因:

动词 别名
try-reload-or-restart reload-or-try-restart,,condreloadforce-reload
try-restart condrestart
stop condstop

因此,这些命令组归结为startstopreload。由于startstop对于大多数服务类型而言都是必需的(并且您通常知道某项服务是否支持其中一种),因此您唯一想知道的是某项服务是否支持reload

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

正如 @LucaRicci 指出的那样,更复杂的服务可以有一个ReloadSignal而不是ExecReload,它们将通过以下方式回答sd_通知表示成功。

总结

systemctl本质上支持startstopreload。要了解服务是否支持重新加载,只需尝试一下即可。如果您需要在脚本或其他东西中重新加载多个服务,请使用,如果服务具有-command 或存储,reload-or-restart则重新加载服务,否则重新启动它。ExecReloadReloadSignal

相关内容