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


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

我正在寻找与Debian相当的规范 invoke-rc.d apache2 restart

编辑:问题是关于 一般而言,推出受控服务,而不是具体的Apache( - 这只是一个例子)。


128
2017-10-26 12:21




从目前为止的答案来看,假设没有单一的launchctl命令是正确的 重新开始 服务? - JS.


答案:


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

$ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist 

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

$ sudo launchctl unload  /System/Library/LaunchDaemons/ssh.plist 

列出服务,正如您可能已经猜到的那样使用'list'子命令;)

玩得开心, ñ


143
2017-10-26 14:00



此外, launchctl list 不抱怨,但没有显示一切, sudo launchctl list 是需要的。 - conny
并不是它没有显示所有内容,它显示了完全不同的列表。当你跑步 launchctl 作为普通用户,它显示/管理在用户会话中运行的LaunchAgent;以root身份运行,它显示/管理系统范围的LaunchDaemons。 - Gordon Davisson
我可以在该列表中看到“com.openssh.sshd”,所以我猜配置是“已加载”。现在,举个例子 sudo launchctl start com.openssh.sshd 不这样做 什么,而不是伊万失败的错误信息,甚至更少实际发射任何东西? - conny
@conny在一般情况下可能会让人感到困惑,但是当您编写服务并且怀疑例如在启动时发生了令人讨厌的事情时,您可以加载一次并使用'stop'/'start'来调试问题。 - nayden
为什么不提 launchctl start <label> 要么 launchctl stop <label>?如果它已经由launchctl启动,则无需重新加载plist文件(除非它也改变了?)。很烦人没有 restart 要么 reload 命令。任何人都知道单命令制作方法(例如)mongod获取配置文件更改?我只是不满意 ... stop ... && ... start ...。 - Brian


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


7
2017-10-26 14:20





你在找 launchctl

SYNOPSIS
 launchctl [subcommand [arguments ...]]

DESCRIPTION
 launchctl interfaces with launchd to load, unload daemons/agents and gen-
 erally control launchd.  launchctl supports taking subcommands on the
 command line, interactively or even redirected from standard input.
 These commands can be stored in $HOME/.launchd.conf or /etc/launchd.conf
 to be read at the time launchd starts.

2
2017-10-26 13:27



但是阅读这个手册并没有告诉我两者的相同之处 invoke-rc.d my-little-daemon restart 是...它指的是“job_label”,但没有告诉我如何列出“job_label”可用。 - conny
我认为nayden的回应已经涵盖了这一点。 - eric.s


你可以干脆做

sudo launchctl stop com.openssh.sshd

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

sudo launchctl list

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

launchctl list

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


2
2017-12-26 13:05



我试过这个,现在我不能用 ssh 来自我的Mac。重新启动无法修复。更换 stop 同 start 也没解决。 - P i
我试过这个,我仍然可以ssh到我的Mac! - Michael
@ dmitriy-apollonin它不起作用,你必须使用 sudo unload /System/Library/LaunchDaemons/ssh.plist 代替。 - SebMa


sudo apachectl restart

与其他操作系统一起使用,也是Apache的一部分。


1
2017-10-26 12:27



即使主题没有特别提到apache,我应该预料到这种解释......我很抱歉,但那不是我想要的:) - conny
好的,我抓住了httpd部分,使用apachectl是更容易的变种:) - Sven♦


以防万一您正在寻找 launchctl reload,你可以在你的中定义shell函数 ~/.bashrc/.zshrc 就像我做的那样:

function lctl {
    COMMAND=$1
    PLIST_FILE=$2
    if [ "$COMMAND" = "reload" ] && [ -n "$PLIST_FILE" ]
      then
        echo "reloading ${PLIST_FILE}.."
        launchctl unload ${PLIST_FILE}
        launchctl load ${PLIST_FILE}
      else
        echo "either command not specified or plist file is not defined"
    fi
}

命令执行看起来像 - > lctl reload <your-plist-name>.plist


1
2017-10-12 09:21





这个名为Lingon的应用程序有一个小而有用的应用程序。 Lingon免费版就在这里  有时重启服务可能会很棘手。

syslog -w

虽然阅读有帮助。


0
2018-03-08 13:34





我不知道这是你正在寻找的,但你可以试试 top 一个简单的命令,我觉得非常有用。


0
2018-04-18 19:11



但这只显示正在运行的procceses,我不认为你可以启动/停止/重启任何 - user411190
它可以让你停止进程,但开始不是那么多。 - chicks