如何检查是否为已启动的服务设置了OS X“禁用”标志?


8

根据launchctl(强调我的)的手册页:

   -w覆盖Disabled键并将其设置为false。在以前的版本中,此选项将修改配置文件。现在,Disabled键的状态存储在磁盘上的其他位置。

由于已在.plist文件本身中不再设置禁用标志的当前状态,因此检查Disabled密钥不再是判断服务是否在下次启动时运行的准确方法。

该“磁盘上的其他位置”在哪里?更重要的是(更重要的是),如何检查此标志是否设置?

另外,是否可以将服务设置为在下次启动时运行而无需强制立即启动(与一样launchctl load -w /Library/LaunchDaemons/my-service.plist)?

Answers:


8

现在(从10.6.x版本开始)禁用已存储在/private/var/db/launchd.db/com.apple.launchd/overrides.plist中,如下所示:

<key>com.apple.AppleFileServer</key>
<dict>
    <key>Disabled</key>
    <true/>
</dict>

您可以解析该文件以查看哪些启动项被覆盖,但是该文件仅设置为root用户访问权限(“ -rw ------- 1 root wheel”),并且不能保证Apple不会更改事情再次存储在10.7中...

另外,我不知道有什么方法可以使现有的启动项目在下次启动时加载而又不立即加载。(如果是新项目,则没问题:确保其中包含Disabled = false,并将其放入/ Library / LaunchDaemons。)


2
它看起来像是在10.11上移动的:(是否有关于10.11的最新答案的想法?
Peter Lapisu

0

对于新版本的macOS,launchctl 语法和命令已更改

在macOS High Sierra(10.13.4)上进行了以下测试:

launchctl print user/$(id -u)
# For GUI domain (effectively "flat" with login domain)
# See man launchctl for details
launchctl print gui/$(id -u)

您可以使用launchctl printlaunchctl list命令的变体查看附加到用户的系统上服务的许多属性。例如,要查看disabled标志的状态,请查找以下部分:

disabled services = {
{
    "com.apple.macbuddy.icloudsetup.user" => false
    "com.apple.ManagedClientAgent.enrollagent" => true
    "com.apple.FileStatsAgent" => false
    "com.apple.FolderActionsDispatcher" => true
    "homebrew.mxcl.postgresql" => false
    "com.apple.appleseed.seedusaged.postinstall" => true
    "homebrew.mxcl.mysql" => false
}

还有launchctl print system/{service-name}
wisbucky
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.