我在〜/ 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键的情况下尝试了这个。我在这里以及互联网上的其他地方看过其他答案。我已经按照教程,没有发生任何事情。任何帮助非常感谢 - 谢谢!
答案 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