是否可以使用以不同输入参数启动的相同脚本创建服务?

例子:

[Unit]
Description=script description

[Service]
Type=simple
ExecStart=/script.py parameters1
ExecStart=/script.py parameters2
Restart=on-failure

[Install]
WantedBy=multi-user.target

可能吗?

它会以串行模式启动吗?还是在两个不同的过程中?

推荐答案

如果单位文件中有Type=simple,则只能指定一个ExecStart,但可以添加多达ExecStartPreExecStartPost,但这些都不适用于长时间运行的命令,因为它们是串行执行的,在启动下一个命令之前,一个启动的所有内容都会被终止.

如果您可以指定多个ExecStart,那么它们是串行运行的,而不是并行运行的.

如果您想并行运行多个单元,可以做以下几件事:

如果他们在1个参数上有分歧

可以使用模板单位,因此可以创建/etc/systemd/system/foo@.service.NOTE:(@很重要).

[Unit]
Description=script description %I

[Service]
Type=simple
ExecStart=/script.py %i
Restart=on-failure

[Install]
WantedBy=multi-user.target

然后你执行:

$ systemctl start foo@parameter1.service foo@parameter2.service

目标依赖项

您可以创建链接到单个目标的多个单元:

#/etc/systemd/system/bar.target
[Unit]
Description=bar target
Requires=multi-user.target
After=multi-user.target
AllowIsolate=yes

然后你就可以修改自己.服务单元为WantedBy=bar.target个,如:

#/etc/systemd/system/foo@.service
[Unit]
Description=script description %I

[Service]
Type=simple
ExecStart=/script.py %i
Restart=on-failure

[Install]
WantedBy=bar.target

然后,您只需并行启用所需的foo服务,并按如下方式启动bar目标:

$ systemctl daemon-reload
$ systemctl enable foo@param1.service
$ systemctl enable foo@param2.service
$ systemctl start bar.target

NOTE:这适用于任何类型的单元,而不仅仅是模板单元.

Linux相关问答推荐

如何将netcdf文件列表中的特定变量添加到不同的文件中?

X86_64程序集中的分段故障:系统调用问题

在不影响ROS2安装的情况下更新Ubuntu Linux中的CMake

如何在 if ... elif struct 中判断 bash 命令的退出状态?

cu可以从串口读取,但我自己的C程序不能

通过 ssh 在远程计算机上按索引访问数组元素

为什么当凭证助手设置为存储 SSH 远程存储库时 git pull 不使用 .git-credentials

查找在特定日期从特定机器登录的所有用户

使用 bash 在包含模式的 java 文件中查找行,然后替换该行的另一部分

Eclipse 的 C# 插件

任何方式以编程方式在android上运行shell命令?

如何在非阻塞套接字上处理 OpenSSL SSL_ERROR_WANT_READ / WANT_WRITE

如何克隆 OpenLDAP 数据库

谁决定任何数据类型或 struct 的大小(取决于 32 位或 64 位)?

bash 中的线程?

Docker Bash 提示不显示 colored颜色 输出

给定一个 linux 用户名和密码,我如何测试它是否是有效帐户?

如何获取 GNU Makefile 中使用的 shell 命令的退出状态?

网络共享文件夹上的 GIT 存储库中的并发性

编辑文件时保留 samba 共享的文件权限