launchctl - 删除启用/禁用覆盖

时间:2015-07-03 12:21:08

标签: osx-yosemite launchd launchctl

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

例如,要永久禁用root用户不存在的服务'test',请执行以下操作:

sudo launchctl disable user/0/test

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

sudo launchctl print-disabled user/0

结果:

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

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

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

注意:

如果我重新启动计算机,我发现'test'覆盖已添加到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 个答案:

答案 0 :(得分:6)

以前在overrides.plist中的信息的性质似乎发生了变化..

根据launchctl的{​​{1}}页面了解&#34;遗产&#34; man / load子命令..

  

unload覆盖Disabled键,并分别为load和unload子命令设置为false或true。在以前的版本中,此选项将修改配置文件。现在,“已禁用”键的状态存储在磁盘上的其他位置,该位置可能不会被launchd以外的任何进程直接操作。

我现在猜...信息存储在-w目录中。

我的内容包含几个帖子。

/var/db/com.apple.xpc.launchd

在这种情况下,文件名是指不同的用户&#39; id( config disabled.0.plist disabled.200.plist ... disabled.501.plist ... disabled.migrated loginitems.0.plist ... loginitems.501.plist ... 我的501 root )。更改这些文件中的键(显然是root用户)应该删除带有黑暗霸王0的相应覆盖。

如果没有,请尝试在启动恢复或其他驱动器时编辑这些相同的文件 - 以便在launchd未运行/无情地试图成为老板的时候弄乱它们。

答案 1 :(得分:5)

我刚刚在优胜美地上使用LaunchControl解决了这个问题...... 它必须具有令人惊叹的小GUI,用于在OSX上管理守护进程和代理。 它有很多功能...... 所以只需用cask

安装它
$ brew cask install launchcontrol

然后在左侧列表中找到您的服务(在“使用代理”或“全局守护进程”或“其他...”下)。

选择它并在主菜单中转到作业=&gt;覆盖已禁用密钥=&gt;始终为假

然后重启并检查...... 应该工作!

答案 2 :(得分:1)

我可以使用单用户模式来完成此操作。步骤是:

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

答案 3 :(得分:0)

'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/LaunchDeamons

# 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手册页。