我在 ~/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 键。我在 SO 以及互联网上的其他地方查看了其他答案。我已经按照教程进行操作了,但什么也没发生。非常感谢任何帮助 - 谢谢!
你在问launchd
运行名为
". /Users/luke/dev/data_yogapo/script/test_launchd.sh"
它将占用整个值Program
key 作为第一个参数execvp
(see 人 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/script/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>
Note:如果您需要将参数传递给脚本,请使用ProgramArguments
键并将整个命令行放在那里。例如:
<key>ProgramArguments</key>
<string>/Users/luke/dev/data_yogapo/script/test_launchd.sh arg1 arg2 arg3</string>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)