如何重新启动(例如说我的httpd或afpd),运行任何Mac OS X> = 10.5(Leopard-),而不必使用GUI并转到“系统偏好设置”->“共享”,然后取消选中/选中“ Web共享”? br />
我正在寻找与Debian invoke-rc.d apache2 restart等效的规范。

EDIT:问题是关于一般启动的受控服务,而不是关于Apache的启动服务(这只是一个示例) 。

评论

从到目前为止的答案来看,假设没有单个launchctl命令重新启动服务是正确的吗?

@JS。根据手册页,kickstart和-k选项似乎可以解决问题。请在下面查看我的答案...

#1 楼

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

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


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

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


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

很有趣,
n

评论


此外,launchctl list不会抱怨但不会显示所有内容,因此需要sudo launchctl list。

– conny
2010-10-26 16:16

不是它没有显示所有内容,而是显示了完全不同的列表。当您以普通用户身份运行launchctl时,它将显示/管理在用户会话中运行的LaunchAgent。以root身份运行,它显示/管理系统范围的LaunchDaemons。

–戈登·戴维森(Gordon Davisson)
10-10-26在16:32

我可以在该列表中看到“ com.openssh.sshd”,因此我猜该配置已“加载”。现在,例如sudo launchctl start com.openssh.sshd为何不执行任何操作,不会因错误消息而失败,甚至更不实际执行任何操作?

– conny
10-10-26在16:39



@conny在一般情况下可能会造成混淆,但是,当您编写服务时,例如怀疑启动时发生了令人讨厌的事情,您可以加载一次,然后使用“停止” /“启动”来调试问题。

–内登
10-10-28在21:08

为什么不提及launchctl start

#2 楼

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

sudo launchctl kickstart -k system/org.apache.httpd


此信息来自launchctl手册页: br />

评论


当我尝试将此服务挂起时,它在短暂的等待后没有停止,对pid的“ kill”没有帮助,对pid进行的“ kill -9”杀死了该进程,并让kickstart(该命令在另一个环境中运行)控制台,但我尝试终止该进程)继续并再次启动该服务。我没有等很久才开始手动杀死事物,因此等待足够长的时间可能足以解决问题。

–塞缪尔·阿斯伦(SamuelÅslund)
19年6月28日在12:06

#3 楼

您可以简单地执行

sudo launchctl stop com.openssh.sshd


如果您不知道完整的服务名称,则可以执行

sudo launchctl list


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

launchctl list


并且不需要卸载和加载服务。

评论


我尝试了此操作,现在无法在Mac中使用ssh。重新启动无法修复。用start代替stop也不能解决。

– P i
17年5月25日在8:38

我尝试了此操作,但仍然可以在Mac上使用ssh!

–迈克尔
17-10-1在21:57

@ dmitriy-apollonin无效,您必须使用sudo卸载/System/Library/LaunchDaemons/ssh.plist。

–SebMa
18年8月7日在9:21

问题是有关重新启动服务,但我认为launchctl stop不会重新启动服务。

– jochen
19年1月3日,13:50

#4 楼

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

#5 楼

您正在寻找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.


评论


但是阅读手册页并没有告诉我相当于invoke-rc.d my-little-daemon restart是什么……它指的是“ job_label”,但没有告诉我如何列出可用的“ job_label” 。

– conny
2010-10-26 13:51

我认为奈登的回应已经涵盖了这一点。

–eric.s
2010-10-28 13:29

#6 楼

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

function lctl {
    COMMAND=
    PLIST_FILE=
    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

#7 楼

sudo apachectl restart


与其他OS一起使用,并且它是Apache的一部分。

评论


即使该主题没有特别提到apache,我也应该预料到这种解释...。很抱歉,但这不是我想要的:)

– conny
2010-10-26 13:20



好的,我抓住了httpd部分,对于它来说,使用apachectl是更简单的变体:)

– Sven
2010-10-26 14:30

#8 楼

有一个名为Lingon的小型实用程序。
Lingon免费软件在这里
有时重新启动服务可能很棘手。

syslog -w


虽然阅读有所帮助。