/bin/zsh 在由 launchd 运行时无法打开脚本

问题描述

我有一个非常简单的 zsh 脚本,我想使用 launchd 定期运行它。我决定使用 launchdaemons,因为它看起来更通用。我相信这个过程开始了,因为路径中有输出,定义在 plist 文件StandardErrorPath 键中。

脚本如下所示:

#!/bin/zsh
echo "hello"

plist 文件如下所示:

Plist entries

当我使用

加载 launchd 进程时
launchctl load /Library/launchdaemons/testplist.plist

没有错误信息,但是在system.log中每次尝试执行时都会出现错误信息。它有点变化,但我一直有一个错误

服务以异常代码退出:127

此外,每次在系统日志中添加错误 127 时,都会在 plist 中指定的文件添加一行 StandardErrorPath。这条线是

/bin/zsh: 无法打开输入文件:/Users/username/Downloads/zsh/test.zsh

我尝试了什么:

  • 使用 sudo chown root testplist.plist 将 plist 所有者从我的用户更改为 launchdaemons 文件夹中的根目录
  • 使用 chmod +x filename 从 zsh 脚本制作可执行文件
  • 自行运行脚本,成功 (/bin/zsh /Users/username/Downloads/zsh/test.zsh)

最后一件事,可能相关也可能不相关,当我编写 zsh 脚本时,我将权限更改为 750,因为这是教程所说的,否则它不会运行。

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>testplist</string>
    <key>RunAtLoad</key>
    <true/>
    <key>StartInterval</key>
    <integer>20</integer>
    <key>StandardErrorPath</key>
    <string>/Users/username/Downloads/zsh/stderr.log</string>
    <key>StandardOutPath</key>
    <string>/Users/username/Downloads/zsh/stdout.log</string>
    <key>Program</key>
    <string>/Users/username/Downloads/zsh/test.zsh</string>
    <key>KeepAlive</key>
    <true/>
    <key>Debug</key>
    <true/>
</dict>
</plist>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)