14

在 OS X Yosemite (10.10) 上,有没有办法删除服务的启用/禁用覆盖设置?

例如,要为 root 永久禁用不存在的服务“测试”,请执行以下操作:

sudo launchctl disable user/0/test

检查它是否已添加到禁用列表中:

sudo launchctl print-disabled user/0

结果:

disabled services = {
    "test" => true
}
login item associations = {
}

现在,如何从禁用服务列表中删除“测试”?

(我知道我可以启用它,但我只想完全删除该条目。)

笔记:

如果我重新启动计算机,我会看到“测试”覆盖已添加到launchd disabled文件中:

sudo cat /var/db/com.apple.xpc.launchd/disabled.0.plist

结果:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>test</key>
    <true/>
</dict>
</plist>

我尝试运行此命令以手动将其从.plist文件中删除:

sudo /usr/libexec/Plistbuddy /var/db/com.apple.xpc.launchd/disabled.0.plist -c Delete:test

这确实会从文件中删除它,但是当我重新启动计算机时它又会再次出现。有任何想法吗?

4

4 回答 4

9

似乎曾经存在的信息的性质overrides.plist已经改变..

根据“遗留” /子命令launchctl的页面..manloadunload

-w覆盖 Disabled 键并将其分别设置为 false 或 true 用于加载和卸载子命令。在以前的版本中,此选项会修改配置文件。现在 Disabled 键的状态存储在磁盘上的其他位置,除了 launchd 之外,任何进程都不能直接操作该位置。

我想现在......信息存储在/var/db/com.apple.xpc.launchd目录中。

我的内容包含几个 plist。

config disabled.0.plist disabled.200.plist ... disabled.501.plist ... disabled.migrated loginitems.0.plist ... loginitems.501.plist ...

在这种情况下,文件名指的是不同用户的 id(501mine0root)。更改这些文件中的键(显然是 root)应该使用 dark-overlord 删除相应的覆盖launchd

如果没有,请尝试在引导至恢复或其他驱动器时编辑这些相同的文件 - 这样您就可以在launchd不运行/无情地尝试成为老板时弄乱它们。

于 2015-09-23T03:56:00.127 回答
4

我刚刚用 yosemite 上的 LaunchControl 解决了这个问题……它必须有一个很棒的小 GUI 来管理你在 OSX 上的守护进程和代理。它有很多功能......所以只需用木桶安装它

$ brew cask install launchcontrol

然后在左侧列表中找到您的服务(在 Use Agents 或 Global Daemons 或其他...下)。

选择它并在主菜单中转到Job=>Override Disabled key=>Always False

然后重新启动并检查...应该可以工作!

于 2015-09-11T19:25:31.760 回答
4

我能够使用Single User Mode做到这一点。步骤是:

  1. 关闭计算机。
  2. 启动时,进入单用户模式(Command + S)。
  3. 在命令行中,键入/sbin/mount -uw /
  4. 根据需要编辑相应的/var/db/com.apple.xpc.launchd/disabled.*.plist文件,删除禁用的项目。
  5. 键入exit
于 2017-11-30T17:58:38.710 回答
2

“launchctl”使用的配置文件/脚本位于:

# Location of the LaunchAgents which run under the user own name (and is logged in).
$ cd $HOME/Library/LaunchAgents

# Location for the Deamons for running jobs without logged in user.
$ cd /Library/LaunchDaemons

# Location for the LaunchAgents which run as root when the user is logged in.
$ cd /Library/LaunchAgents

以下用于 XML 脚本(以 .plist 结尾)的快速简便的命令是(假设您位于上述目录之一,并且您可能需要 sudo):

# Loads the specified configuration file.  
# Jobs that are not on-demand will be started as soon as possible.
$ The -w option overrides the disabled setting.
# The -F option forces the loading and ignores the Disabled key.
$ launchctl load <script-name.plist>

# Unloads the specified configuration file from the current started session.
$ The -w option overrides the disabled setting.
# The -F option forces the loading and ignores the Disabled key.
$ launchctl unload <script-name.plist>

# Removes the specified configuration from the list and does not appear after rebooting
$ launchctl remove <script-name.plist>

有关详细信息,请参阅https://ss64.com/osx/launchctl.html上的 launchctl 手册页。

于 2019-03-11T15:25:57.143 回答