有人可以澄清如何使用launchd的Program和ProgramArgumentsconfiguration参数? 我试图注册一个服务,在命令行我会像这样开始:
$ /foo/bar/baz/python /foo/bar/baz/service start
我已经尝试用各种方式将其分解为launchd:
<key>Program</key> <string>/foo/bar/baz/python</string> <key>ProgramArguments</key> <array> <string>/foo/bar/baz/service</string> <string>start</string> </array>
要么
<key>Program</key> <string>/foo/bar/baz/python</string> <key>ProgramArguments</key> <array> <string>/foo/bar/baz/service start</string> </array>
要么
<key>ProgramArguments</key> <array> <string>/foo/bar/baz/python</string> <string>/foo/bar/baz/service</string> <string>start</string> </array>
要么
<key>Program</key> <string>/bin/bash</string> <key>ProgramArguments</key> <array> <string>-c</string> <string>/foo/bar/baz/python /foo/bar/baz/service start</string> </array>
以及其他任何似乎有意义的变化。 虽然服务总是失败,各种不同的错误。 唯一有效的工作是创build一个.sh脚本,并通过launchd运行。
因此,要一劳永逸地了解启动服务:launchd如何使用这两个configuration参数,我将如何复制我的bash命令,两者之间有什么区别?
或者我可能只是磕磕绊绊地运行这个特定的服务的问题,有没有一些环境variables,通过bash执行时存在? 该服务本身没有提供任何有用的输出。
我已经按照launchd.plist(5)build议咨询了execvp(3)手动input ,但是这并没有进一步加深我的理解。
如果指定了程序,即使已指定了ProgramArguments ,它也将始终是执行的程序。
<key>Program</key> <string>/foo/bar/baz/python</string> <key>ProgramArguments</key> <array> <string>/foo/bar/baz/python</string> <string>/foo/bar/baz/service</string> <string>start</string> </array>
在这种情况下, ProgramArguments的第一个元素实际上没有被计算,但是它被作为argv[0]传递给被执行的程序。 通常这不是必需的,但它有它的用途。 例如,程序可能会检查argv[0]并根据此值以不同的模式运行。
对于其他所有内容,仅使用ProgramArguments就足够了。 这个工作定义和上面的完全一样:
<key>ProgramArguments</key> <array> <string>/foo/bar/baz/python</string> <string>/foo/bar/baz/service</string> <string>start</string> </array>