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} 

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

  • start启动(激活)命令行中指定的一个或多个单元。
  • stop停止(停用)命令行中指定的一个或多个单元。
  • reload请求命令行上列出的所有设备重新加载其configuration。
  • restart启动在命令行上restart启动一个或多个单元。 如果单位还没有运行,他们将被启动。
  • try-restart如果单元正在运行,请try-restart启动一个或多个在命令行中指定的单元。 如果单位没有运行,这什么都不做。 请注意,为了与Red Hat初始化脚本兼容, condrestart等同于此命令。
  • reload-or-restart加载一个或多个单位,如果他们支持。 如果不是,请重新启动它们。 如果单位还没有运行,他们将被启动。
  • reload-or-try-restart载入一个或多个单位(如果他们支持的话)。 如果不是,请重新启动它们。 如果单位没有运行,这什么都不做。 请注意,为了与SysV init脚本兼容, force-reload等同于此命令。

所以这些命令的组合基本上归结为startstopreload 。 由于大多数服务types都需要startstop (通常你知道服务是否支持其中之一),所以你可能想知道的唯一事情就是给定的服务是否支持reload

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

TL; DR

systemctl本质上支持startstopreload 。 要找出一个服务是否支持重新加载,只需尝试一下。 如果您需要在脚本或其他东西中重新加载多个服务,请使用reload-or-restart ,如果存储了ExecReload命令,则重新加载服务,否则重新启动服务。