【问题标题】:Bash script does not run via Mac OS LaunchdBash 脚本不能通过 Mac OS Launchd 运行
【发布时间】:2019-11-27 00:18:07
【问题描述】:

当我直接通过终端尝试时,以下脚本运行良好:

count=`ls -l /Users/ben/Downloads/*.png 2>/dev/null | wc -l`
echo $count`

它返回计数为 1,这是正确的!

但是当我通过 launchd 运行它时,它总是返回零!

这是我的启动脚本

<?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.ben.Cleaner</string>
  <key>ProgramArguments</key>
  <array>
        <string>/bin/sh</string>
        <string>/Users/ben/Scripts/clean.sh</string>
  </array>
  <key>StartCalendarInterval</key>
  <dict>
    <key>Hour</key>
    <integer>22</integer>
  </dict>
  <key>StandardErrorPath</key>
  <string>/tmp/AlTest12.err</string>
  <key>StandardOutPath</key>
  <string>/tmp/AlTest12.out</string>
</dict>
</plist>

知道为什么它不能通过 launchd 工作吗?我在 Mac OS Catalina 上运行。

【问题讨论】:

  • 不应该/tmp/AlTest12.err 知道它为什么会失败吗?
  • 好吧,没有什么是失败的。相反,它只是返回零(而不是 1)。正如我所说,如果我从终端运行脚本,它工作正常!
  • 第二行中的`字符在做什么?错字?它可能与默认外壳有关。在脚本的开头添加 shell。 (#!/bin/bash, #!/bin/zsh ...) 尝试调试变量并将代码从脚本中返回到文件中。在脚本的第一行也使用 $() 而不是 ``。 ;)
  • 因此,当您从命令行运行 /bin/sh /Users/ben/Scripts/clean.sh 时,它运行良好并打印 '1'。
  • @Roadowl,没错

标签: bash macos launchd macos-catalina


【解决方案1】:

尝试将时间间隔更改为以下结构:

<key>StartInterval</key>
<integer>1800</integer>

这部分:

<key>StartCalendarInterval</key>
  <dict>
    <key>Hour</key>
    <integer>22</integer>
  </dict>

对我不起作用,将所有内容转换为秒,也许这可能会有所帮助,对我来说确实如此。

【讨论】:

    猜你喜欢
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2020-11-20
    相关资源
    最近更新 更多