是否可以为我的 systemd 服务提供多个参数?
我想执行一个带有多个参数的程序,这些参数必须由最终用户决定。
例如: ./program arg1 arg2
要启动一个单参数应用程序,我需要类似的东西systemctl start arg1@program,在服务定义中我有ExecStart = /usr/bin/program ?i.
谢谢!
ale*_*exm 52
是的你可以!将它们定义在某个文件中并将它们添加到EnvironmentFile您的 systemd 服务中。例如,假设 /etc/.progconf 的内容是:
ARG1=-o
ARG2=--verbose
Run Code Online (Sandbox Code Playgroud)
还有你的 .service 文件:
EnvironmentFile=/etc/.progconf
ExecStart = /usr/bin/prog $ARG1 $ARG2
Run Code Online (Sandbox Code Playgroud)
如果您需要随时更改它们,您可以写入该文件。服务不应该经常更改其选项,如果需要,可以考虑自动启动或 cron。
有关更多示例,请查看:https : //wiki.archlinux.org/index.php/Systemd/Services
non*_*gon 36
我想做同样的事情,但没有为每个参数组合创建单独的文件。我发现我可以用空格传递一个长参数,然后使用 systemd 的环境变量空间分割功能来分隔参数。
我创建了一个带有文件名的服务argtest@.service(注意当服务接受参数时需要尾随的“at 符号”)。
[Unit]
Description=Test passing multiple arguments
[Service]
Environment="SCRIPT_ARGS=%I"
ExecStart=/tmp/test.py $SCRIPT_ARGS
Run Code Online (Sandbox Code Playgroud)
我运行sudo systemctl start argtest@"arg1 arg2 arg3".service它arg1,它通过,arg2和arg3作为单独的命令行参数传递给 test.py。
我发现的最简单的是:
ExecStart=/bin/bash -c "\"/path/with spaces/to/app\" arg1 arg2 arg3 \"arg with space\""
Run Code Online (Sandbox Code Playgroud)
保持一切独立。
话虽如此,我发现至少在 Ubuntu 18.04 LTS 上,我什至不需要这样做,我可以这样做,而且效果很好:
ExecStart="/path/with spaces/to/app" arg1 arg2 arg3 "arg with space"
Run Code Online (Sandbox Code Playgroud)
$vars也可以作为此模式的参数。
| 归档时间: |
|
| 查看次数: |
103812 次 |
| 最近记录: |