关于 systemd、环境文件和服务可执行文件的命令行参数的混淆

关于 systemd、环境文件和服务可执行文件的命令行参数的混淆

我正在尝试将upstart脚本转换为systemd,但我不知道如何将命令行参数传递给可执行文件。这是原始upstart脚本:

# job description

description "job description"

start on (started wrouterd and wrouterd-started)
stop on (stopping wrouterd)

instance    $SLUG[$PHONE]

chdir       /var/application/bin
console     log
manual
respawn
respawn limit 5 60

exec /usr/bin/php my_script.php --phone=${PHONE} --slug=${SLUG}

到目前为止,这就是我得到的:

[Unit]
Description=service description
After=wrouterd.service

[Service]
Type=simple
WorkingDirectory=/var/application/bin
StandardOutput=tty, StandardError=tty
Restart=on-failure
RestartSec=30s
ExecStart=/usr/bin/php my_script.php --phone=${PHONE} --slug=${SLUG}

我读过一些有关环境文件的内容,但我不确定它们是否适用于我的情况,因为他们说这里“服务不应该经常更改它的选项”和“服务参数不会定期更改,它们的配置文件也不会更改”,并且我目前有大约 130 个该作业实例同时运行我需要能够随时开始和停止。我需要为每个实例创建一个环境文件吗?或者我是否需要更改单个环境文件中的变量,然后启动/停止脚本?

答案1

也许您正在寻找实例。看到这个博客讨论如何通过创建指向该单元的符号链接来根据需要多次实例化单个 getty 单元,其中文件名包含传递给该单元的任意参数,可以将其恢复为%I%i

例如,做

systemctl start [email protected]

将首先查找具有该确切文件名的文件,然后删除该ttyUSB0部分并查找[email protected] file.在设备内部您会看到类似的线条/usr/lib/systemd/system/[email protected]

ExecStart=-/sbin/agetty -s %I 115200,38400,9600

这将导致 getty 使用 argttyUSB0代替%I.

我强烈建议您阅读所有内容系列博客在 systemd 上。

相关内容