launchctl - 删除启用/禁用覆盖

问题描述 投票:12回答:4

在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

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

osx-yosemite launchd launchctl
4个回答
6
投票

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

根据launchctlman页面为“遗产”load / unload子命令..

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

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

我的内容包含几个plists。

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

在这种情况下,文件名是指不同的用户ID(501是我的,0是root)。更改这些文件中的键(显然是root用户)应该删除与暗霸王launchd相对应的覆盖。

如果没有,尝试编辑这些相同的文件,同时启动到恢复,或其他驱动器 - 所以你可以搞砸他们,而launchd没有运行/无情地试图成为老板。


4
投票

我刚刚在yosemite上用LaunchControl解决了这个问题...它必须有一个非常棒的GUI用于管理OSX上的守护进程和代理。它有很多功能......所以只需要用cask安装它

$ brew cask install launchcontrol

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

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

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


1
投票

我能够使用单用户模式执行此操作。步骤是:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.