【问题标题】:MacOS Catalina launchd can't open input file errorMacOS Catalina launchd 无法打开输入文件错误
【发布时间】:2020-10-19 00:40:55
【问题描述】:

为什么 launchd 不能加载我的 zsh 程序?我很困惑。我的 testplisterror.log 给了我这个错误:

/bin/zsh:无法打开输入文件:/Users/controlroom/Desktop/Bin/testplist.zsh -- 下面是我位于 LaunchAgents 目录中的 com.testplist.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>Label</key>
    <string>com.testplist.plist</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/zsh</string>
        <string>/Users/controlroom/Desktop/Bin/testplist.zsh</string>
    </array>
    <key>StartInterval</key>
    <integer>30</integer>
    <key>StandardOutPath</key>
    <string>/Users/controlroom/Desktop/testplist.log</string>
    <key>StandardErrorPath</key>
    <string>/Users/controlroom/Desktop/testplisterror.log</string>
</dict>
</plist>

这是我的 testplist.zsh 文件:

#!/bin/zsh
date >> ~/Desktop/launchdtest.txt

【问题讨论】:

  • 您可能会遇到麻烦,因为 Transparency Consent and Control (TCC) 限制了对“个人”数据的访问,包括用户桌面文件夹中的任何内容。可能可以授予对作业的访问权限(有关一些信息,请参阅here),但首先我会尝试将文件移动到非私人区域。
  • 谢谢,成功了!所以我把脚本放在“共享”的一个新文件夹下,现在我的 zsh 脚本可以工作了。我不敢相信这是TCC!狡猾的苹果。那么我如何知道我有权访问的所有文件夹以从 launchd 运行脚本?
  • 我认为这更多的是避免受限制的文件夹。不幸的是,受限位置的列表不断扩大(请参阅here),所以我不知道一个完全明确的答案。就个人而言,我倾向于将 unixish 自动运行脚本放在 /usr/local/libexec/ 中(默认情况下不存在,但您可以创建它)。

标签: macos zsh macos-catalina launchd


【解决方案1】:

所以这是因为 TCC 错误,但因为脚本没有 GUI,所以您不会收到错误。因此,正如 Gordan Davisson 所说,Apple 有一些 TTC 指南。这些特定文件夹在 Catalina 中受 TCC 保护:

~/桌面, 〜/文件, 〜/下载, iCloud 云盘,

第三方云存储(如果使用), 可移动卷, 网络容量。

https://eclecticlight.co/2020/01/16/a-guide-to-catalinas-privacy-protection-3-new-protected-locations/

“逻辑建议您可以将脚本添加到全盘访问列表,但我认为您会发现您不能,因为它只接受应用程序和可执行文件。”所以这里的问题是,由于 Apples TCC,目前您无法将 .zsh 脚本添加到全盘访问列表。”

【讨论】:

    【解决方案2】:

    好的,首先,为了启动抓取文件,您必须添加:

    <key>UserName></key> 
    <string>usernamehere</string> 
    

    换句话说,程序必须作为用户名运行——如果你没有这个,它就找不到文件。

    其次,必须添加:

    <key>GroupName</key> 
    <string>wheel</string>
    

    第三方 -- 有时 3rd 方命令将无法在您的脚本中正确执行,除非您添加

    <key>EnvironmentalVariables</key> 
    <key>PATH</path> 
    <string>/usr/local/bin:...etc.</string> 
    

    由于某种原因,如果您的脚本中没有此功能,它无法找到第 3 方 CLI 应用程序的可执行文件。

    因为语法可能很困难且容易出错,我强烈建议使用 LaunchControl 应用程序来执行此操作。这是一个非常有用的软件!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-07
      • 2014-02-22
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多