我在旧服务器上安装了一项服务并开始使用;
service load-simulator start medium
该值medium
充当某种配置文件。它可以具有诸如、、和这样的值low
。我medium
需要让它在新更新的 Linux 服务器上运行。high
extreme
它有一个脚本,init.d
其中接受末尾的参数并设置 USED_PROFILE 环境变量。我已经在新服务器中安装了此服务,但之前提到的相同服务命令却出现错误No Profile Specified
,无法启动。
由于它systemctl
现在正在启动,我需要按照什么顺序提供参数才能使其工作?
该脚本包含以下内容;
case "$1" in
start)
if [ $# -eq 2 ]; then
export USED_PROFILE=$2
else
printNoProfileSpecified
exit 1
fi
$1
;;
抱歉,这是一个新手问题。我对此很陌生。尝试了不同的排序和service
命令systemctl
,但都不起作用。任何帮助或提示都非常感谢。提前致谢。
systemd 的部分设计是,从终端启动的服务遵循与系统启动期间完全相同的规则和环境(反之亦然)——它们不能直接传递任何一次性命令或参数,因为无法用启动依赖关系来表达它们。
因此,向“预定义” systemd 服务提供自定义参数的唯一方法是将其转变为模板单元,它可以接收一个参数作为实例名称的一部分:
将您的单位重命名为,以
<name>@.service
表明它是一个模板。让单元使用
%i
或%I
来填充实例参数(%i
不做任何处理,但%I
应用一些反转义规则)。例如:或者,为了避免冗余的 init.d 脚本(通常不建议与 systemd 一起使用,因为它们往往会使其监控功能无效):
或者:
使用 systemctl 启动它:
请注意,由于参数成为单元名称的一部分, systemd 将允许使用不同的参数启动同一模板的多个副本 - 例如,它将允许同时启动一个
[email protected]
和一个,并且它们两个同样与原始非模板分开。如果您不想允许多个实例,服务程序需要有自己的锁定(使用或其他类型的锁定文件);例如[email protected]
sim.service
flock
flock /run/loadsim.lock /bin/loadsim ...
如果“服务”不是一个服务,而是一个仅依赖于其他 systemd 功能(例如内存限制)的一次性命令,则
systemd-run
可以使用此类参数启动任意命令。