我在〜/ 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>
Run Code Online (Sandbox Code Playgroud)
test_launchd.sh文件包含以下内容:
#! /bin/bash
echo "hello world from test_launchd.sh" >> /Users/luke/dev/data_yogapo/log/development.log
Run Code Online (Sandbox Code Playgroud)
当我手动运行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
Run Code Online (Sandbox Code Playgroud)
我已经尝试过使用和不使用RunAtLoad键.我在这里以及互联网上的其他地方看过其他答案.我已经按照教程,并没有发生任何事情.任何帮助非常感谢 - 谢谢!
你要求launchd运行名为的程序
". /Users/luke/dev/data_yogapo/script/test_launchd.sh"
Run Code Online (Sandbox Code Playgroud)
它将把Program键的整个值作为第一个参数execvp(有关详细信息,请参阅man execvp(3))
如果你要检查system日志,你会看到类似的东西:
5月22日21:17:38凹陷com.apple.launchd.peruser.501 [202](com.yogapo.test_launchd [32986]):posix_spawn("./ Users/luke/dev/data_yogapo/scripts/test_launchd.sh" ,...):没有这样的文件或目录5月22日21:17:38凹陷com.apple.launchd.peruser.501 [202](com.yogapo.test_launchd [32986]):退出退出代码:1
launchd不是一个壳.但是,它可以解释hash-bang字符序列以识别用于解释脚本的程序.因此,只需将脚本指定为要运行的程序:
<key>Program</key>
<string>/Users/luke/dev/data_yogapo/script/test_launchd.sh</string>
Run Code Online (Sandbox Code Playgroud)
注意:如果需要将参数传递给脚本,请使用ProgramArguments密钥并将整个命令行放在那里.例如:
<key>ProgramArguments</key>
<string>/Users/luke/dev/data_yogapo/script/test_launchd.sh arg1 arg2 arg3</string>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8196 次 |
| 最近记录: |