我的launchctl配置有什么问题?


15

我正在尝试在登录时自动运行SickBeard

python /Applications/Sick-Beard/Sickbeard.py

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.sickbeard.sickbeard</string>
  <key>ProgramArguments</key>
  <array>
       <string>/usr/bin/python</string>
       <string>/Applications/Sick-Beard/SickBeard.py</string>
       <string>-q</string>
       <string>-d</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

当我运行时,launchctl com.sickbeard.sickbeard.plist它会显示以下消息:

launchctl加载com.sickbeard.sickbeard.plist launchctl:com.sickbeard.sickbeard.plist没有返回plist launchctl:com.sickbeard.sickbeard.plist没有返回plist没有找到要加载的内容


我假设您的意思是在命令行中“ launchctl load com.sickbeard.sickbeard.plist”?否则,您将得到一个完全不同的错误;-)
binarybob 2012年

Answers:


37

我假设python脚本及其参数的路径有效,否则您很可能在控制台中看到错误。

我上次看到该错误的原因是,plist中存在虚假字符,例如多余的空格,导致语法错误,因此使其无法加载。如果您plutil -lint在plist上运行,这将为您检查语法,并方便地向后报告发生错误的行。

plutil -lint com.sickbeard.sickbeard.plist

如果那没有帮助,(OSX)如何在病态论坛上登录时启动SickBeard或在OSX线程上启动OSX线程,则plist与您的plist略有不同(sickbeard 从而/usr/local不是/Applications- 运行,因此可能是权限问题),并且也有些人跟你有同样的问题


2
谢谢您的帮助。复制和粘贴似乎带来了一个额外的字符,该字符被隐藏了。我用nano重新输入了整个XML,它工作得很好。
Joao Costa

2
谢谢,以前从未知道plutil -lint。非常便利!
robmathers

刚刚发现了这个帖子,但是检出Console输出也有助于进行调试。
Wing Tang Wong

2

正如我发现的困难方式一样,您必须使用sudo并通过以下方式传递.plist文件的完整路径来执行命令(在您的情况下):

sudo launchctl load /Library/LaunchDaemons/com.sickbeard.sickbeard.plist

路径对您来说可能有所不同,但是您必须找到该文件以找到其位置,然后将其传递给我引用该launchctl命令的位置。


2

该消息nothing found to load表示有时该配置被其他配置覆盖。使用时,可以通过使用选项“ -w”来强制加载launchctl load or unload

如果必须强制加载或卸载plist文件,则意味着您具有覆盖plist的配置。使用“ -w”时会创建此覆盖,否则不会将任何覆盖添加到覆盖文件中。为避免这种情况,请编辑下面的文件,搜索要删除替代的作业标签,删除必要的行:

pico /var/db/launchd.db/com.apple.launchd/overrides.plist

例如,删除此行

<key>com.mydomain.myjob</key>
<dict>
        <key>Disabled</key>
        <true/>
</dict>

那么您可以使用:launchctl load or unload /Library/LaunchDaemons/com.mydomain.myjob.plist不需要“ -w”或“ -F”,则不应该显示消息nothing found to load


1

您可能需要添加-F标志以强制launchctl加载.plist。另外,请确保.plist位于路径launchctl搜索中。如果您的.plist位于其他位置,则还可以添加-D标志并指定域。从联机帮助页:

-D域
在给定的域中查找以* .plist结尾的plist(5)文件。有效域包括“系统”,“本地”,“网络”和“全部”。提供会话类型时,可以使用称为“用户”的其他域。例如,如果未指定会话类型,则将从/ System / Library / LaunchDaemons的属性列表文件中加载“ -D系统”。传递了会话类型后,它将从/ System / Library / LaunchAgents加载。

确保您彻底检查了手册页中包含的所有信息-如果未正确配置呼叫,则可能使您难以承受。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.