如何从命令行启动/停止/重启launchd服务?

con*_*nny 170 mac-osx osx-leopard service launchd

如何重新启动,例如我的 httpd 或 afpd,运行任何 Mac OS X >= 10.5 (Leopard-),而无需使用 GUI 并转到系统偏好设置 -> 共享并取消选中/选中“网络共享”?

我正在寻找与 Debian 的invoke-rc.d apache2 restart.

编辑:问题是关于一般的启动控制服务,而不是特别是 Apache(-这只是一个例子)。

nay*_*den 184

launchctl(8) 是你的朋友。请记住,配置文件中禁用了某些服务(例如 sshd),因此您需要-w在加载它们时使用开关。这是一个 sshd 示例:

$ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist 
Run Code Online (Sandbox Code Playgroud)

您可以使用unload子命令停止服务。

$ sudo launchctl unload  /System/Library/LaunchDaemons/ssh.plist 
Run Code Online (Sandbox Code Playgroud)

要列出服务,您可能已经猜到了,请使用“list”子命令;)

  • 此外,`launchctl list` 不会报错但不会显示所有内容,为此需要 `sudo launchctl list`。 (11认同)
  • 并不是它没有显示所有内容,而是显示了一个完全不同的列表。当您以普通用户身份运行“launchctl”时,它会显示/管理在您的用户会话中运行的 LaunchAgents;以 root 身份运行,它显示/管理系统范围的 LaunchDaemons。 (9认同)
  • 为什么没有提到 `launchctl start <label>` 或 `launchctl stop <label>`?如果它已经由 launchctl 启动,则无需重新加载 plist 文件(除非它也更改了?)。没有`restart` 或`reload` 命令很烦人。任何人都知道使(例如)mongod 获取配置文件更改的单命令方式?我只是对`...停止...&&...开始...`不满意。 (7认同)
  • 我可以在该列表中看到“com.openssh.sshd”,所以我猜该配置已“加载”。现在,为什么例如`sudo launchctl start com.openssh.sshd` 不做*任何事情*,而不是evan 失败并显示错误消息,甚至更不用说实际启动任何东西? (2认同)
  • @conny在一般情况下可能会令人困惑,但是当您编写服务并且您怀疑例如启动时发生了令人讨厌的事情时,您可以加载一次并使用'stop'/'start'来调试问题. (2认同)

小智 17

要重新启动服务,您可以使用launchctl kickstart命令和-k选项。例如,要重新启动 apache,您可以使用

sudo launchctl kickstart -k system/org.apache.httpd
Run Code Online (Sandbox Code Playgroud)

此信息来自launchctl手册页:

 kickstart [-kp] service-target
          Instructs launchd to run the specified service immediately, regardless of its
          configured launch conditions.

          -k       If the service is already running, kill the running instance before
                   restarting the service.
          [...]
Run Code Online (Sandbox Code Playgroud)


小智 9

你可以简单地做

sudo launchctl stop com.openssh.sshd
Run Code Online (Sandbox Code Playgroud)

如果你不知道完整的服务名称,你可以这样做

sudo launchctl list
Run Code Online (Sandbox Code Playgroud)

如果您仍然没有找到您期望的服务,请尝试在没有 root 身份的情况下运行:

launchctl list
Run Code Online (Sandbox Code Playgroud)

而且您不需要卸载和加载服务。


小智 7

sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist