有人可以澄清应该如何使用launchdProgram
和ProgramArguments
配置参数吗?我试图在命令行上注册一个服务,我会像这样开始:
$ /foo/bar/baz/python /foo/bar/baz/service start
Run Code Online (Sandbox Code Playgroud)
我已经尝试以各种方式将其分配给 launchd:
$ /foo/bar/baz/python /foo/bar/baz/service start
Run Code Online (Sandbox Code Playgroud)
或者
<key>Program</key>
<string>/foo/bar/baz/python</string>
<key>ProgramArguments</key>
<array>
<string>/foo/bar/baz/service</string>
<string>start</string>
</array>
Run Code Online (Sandbox Code Playgroud)
或者
<key>Program</key>
<string>/foo/bar/baz/python</string>
<key>ProgramArguments</key>
<array>
<string>/foo/bar/baz/service start</string>
</array>
Run Code Online (Sandbox Code Playgroud)
或者
<key>ProgramArguments</key>
<array>
<string>/foo/bar/baz/python</string>
<string>/foo/bar/baz/service</string>
<string>start</string>
</array>
Run Code Online (Sandbox Code Playgroud)
以及几乎任何其他似乎有意义的变体。但是,该服务总是因各种不同的错误而失败。唯一有效的方法是使用确切的行创建一个 .sh 脚本并通过 launchd运行它。
因此,要一劳永逸地了解launchd服务:launchd如何使用这两个配置参数,我将如何使用它们复制我的bash命令以及两者之间有什么区别?
或者我可能只是偶然发现了运行这个特定服务的问题,无论是否存在通过 bash 执行它时存在的一些环境变量?服务本身没有提供任何有用的输出。
我已经按照 中的建议查阅了execvp(3)
手册条目launchd.plist(5)
,但这并没有真正加深我的理解。
小智 4
如果Program
指定,它将始终是执行的程序,即使也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>
Run Code Online (Sandbox Code Playgroud)
在这种情况下, in 中的第一个元素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>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2762 次 |
最近记录: |