如何使用 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 ,,condreload force-reload |
try-restart |
condrestart |
stop |
condstop |
因此,这些命令组归结为start
、stop
和reload
。由于start
和stop
对于大多数服务类型而言都是必需的(并且您通常知道某项服务是否支持其中一种),因此您唯一想知道的是某项服务是否支持reload
。
大多数情况下,您希望它重新加载或重新启动:使用systemctl reload-or-restart nagios
then。要真正找出执行了什么命令(如果有)来重新加载,您可以查看其服务文件。这通常可以在/lib/systemd/system/
或中找到/usr/lib/systemd/system
,并且名为$SERVICENAME.service
(在您的例子中nagios.service
)。此文件包含用于启动、停止和可能重新加载服务的命令,即ExecStart
、ExecStop
和ExecReload
。如果您对此感兴趣,您可以执行grep ExecReload /lib/systemd/system/nagios.service
来找出服务是否支持重新加载。
正如 @LucaRicci 指出的那样,更复杂的服务可以有一个ReloadSignal
而不是ExecReload
,它们将通过以下方式回答sd_通知表示成功。
总结
systemctl
本质上支持start
、stop
和reload
。要了解服务是否支持重新加载,只需尝试一下即可。如果您需要在脚本或其他东西中重新加载多个服务,请使用,如果服务具有-command 或存储,reload-or-restart
则重新加载服务,否则重新启动它。ExecReload
ReloadSignal