如何在 OSX 上不使用 sudo 将 offlineimap plist 加载到 launchctl 中?

如何在 OSX 上不使用 sudo 将 offlineimap plist 加载到 launchctl 中?

我希望 launchd 每隔几分钟运行一次 offlineimap 来更新我的 mutt 消息目录。但是如果不使用 sudo,我似乎无法获取要加载 offlineimap 的 plist 文件。

跑步时

launchctl load -S Aqua /path/to/plist

我收到错误:

launch_msg(): Socket is not connected

我认为这与我没有该套接字的 sudo 权限有关。

sudo launchctl load -S Aqua /path/to/plist

运行没有任何问题,但 offlineimap 在 /var/root 中查找 .offlineimaprc,这毫无帮助。我相信这是因为 offlineimap 是以 root 用户身份运行的。

有人能提供一些建议吗?我快要开始拔头发了。

回答

我使用 iTerm2 作为我的终端客户端。它似乎不是 Aqua 应用程序,因此我无法使用 launchctl 访问 aqua 会话套接字。在 Terminal.app 中运行相同的命令也允许我这样做。

感谢 Gordon 提出的建议并找到了答案。

答案1

当您不属于适当的会话类型时,launchctl 会给出此错误。在这种情况下,您似乎正在尝试将 launchd 项目加载到 Aqua(即 GUI 登录)会话中,但此操作失败,因为您没有在这样的会话中运行。您是否正在通过 SSH 连接到计算机,或者类似的东西?

顺便说一句,它在使用 sudo 时起作用的原因是,以 root 身份运行 launchctl 总是与系统会话对话(显然这会覆盖该-S Aqua选项),而系统会话始终存在。

答案2

如果您仍想从 iTerm2 使用 launchctl,您也可以这样做:

sudo launchctl load -F /path/to/plist

这应该可行,因为当我尝试从 iTerm2 进行“正常”加载时,我也遇到了与您相同的问题

相关内容