“你好世界”推出了plist不工作

时间:2012-05-20 18:57:34

标签: plist launchd

我在〜/ Library / LaunchAgents中有以下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.yogapo.test_launchd</string>

    <key>Program</key>
    <string>. /Users/luke/dev/data_yogapo/script/test_launchd.sh</string>

    <key>StartInterval</key>
    <integer>10</integer>

    <key>RunAtLoad</key>
    <true/>
  </dict>
</plist>

test_launchd.sh文件包含以下内容:

#! /bin/bash 

echo "hello world from test_launchd.sh" >> /Users/luke/dev/data_yogapo/log/development.log

当我用
手动运行test_launchd.sh时 . /Users/luke/dev/data_yogapo/script/test_launchd.sh 结果与预期一致:该行显示在development.log

的末尾

但是当我加载这个plist文件时,没有任何反应:

$ cd ~/Library/LaunchAgents
$ launchctl load com.yogapo.test_launchd.plist
$ launchctl list | grep yogapo
  -       1       com.yogapo.test_launchd

我在使用和没有RunAtLoad键的情况下尝试了这个。我在这里以及互联网上的其他地方看过其他答案。我已经按照教程,没有发生任何事情。任何帮助非常感谢 - 谢谢!

2 个答案:

答案 0 :(得分:7)

您要求launchd运行名为

的程序
". /Users/luke/dev/data_yogapo/script/test_launchd.sh"

Program键的全部值作为execvp的第一个参数(有关详细信息,请参阅man execvp(3)

如果你要查看system日志,你会看到类似的内容:

  

May 22 21:17:38 deted com.apple.launchd.peruser.501 [202]   (com.yogapo.test_launchd [32986]):posix_spawn(“。   /Users/luke/dev/data_yogapo/script/test_launchd.sh“,...):没有这样的   文件或目录5月22日21:17:38凹陷   com.apple.launchd.peruser.501 [202](com.yogapo.test_launchd [32986]):   退出退出代码:1

launchd不是shell。但是,它可以解释hash-bang字符序列以识别用于解释脚本的程序。因此,只需将脚本指定为要运行的程序:

<key>Program</key>
<string>/Users/luke/dev/data_yogapo/script/test_launchd.sh</string>

注意:如果需要将参数传递给脚本,请改用ProgramArguments键并将整个命令行放在那里。例如:

<key>ProgramArguments</key>
<string>/Users/luke/dev/data_yogapo/script/test_launchd.sh arg1 arg2 arg3</string>

答案 1 :(得分:0)

解 我发现最简单的方法是下载一个应用程序来操作这些文件:

https://itunes.apple.com/us/app/launchd-task-scheduler/id620249105