Fra*_*cis 12 launchd osx-yosemite launchctl
在OS X Yosemite(10.10)上,有没有办法删除服务的启用/禁用覆盖设置?
例如,要永久禁用root用户不存在的服务"test",请执行以下操作:
sudo launchctl disable user/0/test
Run Code Online (Sandbox Code Playgroud)
检查它是否已添加到禁用列表中:
sudo launchctl print-disabled user/0
Run Code Online (Sandbox Code Playgroud)
结果:
disabled services = {
"test" => true
}
login item associations = {
}
Run Code Online (Sandbox Code Playgroud)
现在,如何从禁用的服务列表中删除"test"?
(我知道我可以启用它,但我只想完全删除该条目.)
注意:
如果我重新启动计算机,我会看到"test"覆盖已添加到launchd disabled文件中:
sudo cat /var/db/com.apple.xpc.launchd/disabled.0.plist
Run Code Online (Sandbox Code Playgroud)
结果:
<?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>
Run Code Online (Sandbox Code Playgroud)
我试过运行此命令手动将其从.plist文件中删除:
sudo /usr/libexec/Plistbuddy /var/db/com.apple.xpc.launchd/disabled.0.plist -c Delete:test
Run Code Online (Sandbox Code Playgroud)
这会将其从文件中删除,但是当我重新启动计算机时它会再次出现.有任何想法吗?
似乎以前信息的本质overrides.plist已经改变了..
据launchctl的man的'传统’页load/ unload分的命令..
-w覆盖Disabled键并分别为load和unload子命令将其设置为false或true.在以前的版本中,此选项将修改配置文件.现在,"已禁用"键的状态存储在磁盘上的其他位置,该位置可能不会被launchd以外的任何进程直接操作.
我想现在......信息存储在/var/db/com.apple.xpc.launchd目录中.
我的内容包含几个plists.
config
disabled.0.plist
disabled.200.plist
...
disabled.501.plist
...
disabled.migrated
loginitems.0.plist
...
loginitems.501.plist
...
在这种情况下,文件名是指不同的用户ID(501是我的,0是root).更改这些文件中的键(显然是root用户)应该删除带有dark-overlord的相应覆盖launchd.
如果没有,尝试在启动恢复或其他驱动器时编辑这些相同的文件 - 这样你就可以在launchd没有运行/无情地试图成为老板时弄乱它们.
我能够使用单用户模式来做到这一点。步骤是:
/sbin/mount -uw //var/db/com.apple.xpc.launchd/disabled.*.plist文件,根据需要删除禁用的项目。exit。我刚刚在yosemite上用LaunchControl解决了这个问题...它必须有一个非常棒的GUI用于管理OSX上的守护进程和代理.它有很多功能......所以只需要用cask安装它
$ brew cask install launchcontrol\nRun Code Online (Sandbox Code Playgroud)
然后在左侧列表中找到您的服务(在"使用代理"或"全局守护程序"或"其他..."下).
选择它,然后在主菜单中转到Job => Override Disabled key => Always False
然后重新启动并检查......应该工作!
| 归档时间: |
|
| 查看次数: |
10031 次 |
| 最近记录: |