在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
这会将其从文件中删除,但是当我重新启动计算机时它会再次出现。有什么想法吗?
答案 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)
我可以使用单用户模式来完成此操作。步骤是:
/sbin/mount -uw /
/var/db/com.apple.xpc.launchd/disabled.*.plist
文件,删除已禁用的项目。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手册页。