Systemd - 服务如何确定第一次运行和重新启动运行?

Systemd - 服务如何确定第一次运行和重新启动运行?

我想要一个在首次运行和重新启动服务时表现不同的服务。这可以用 systemd 实现吗? (我在嵌入式操作系统中使用 systemd)。

我尝试使用 ExecReload 和 ExecStart,但 ExecReload 仅在我使用命令“systemctl restart”时运行。另一方面,ExecStart 在服务重新启动后运行(我有 Restart=on-failure 和 RestartSec=5)。

答案1

您可以用来systemctl set-environment将一些值推送到服务的未来运行中。例如,对于一个单位:

[Unit]
Description=testing
[Service]
Type=oneshot
ExecStart=/my/command myarg1 ${MYDONE}
ExecStart=/usr/bin/systemctl set-environment MYDONE=1
[Install]

第一个systemctl start <unit>传递给的最后一个参数/my/command将在环境中''并且MYDONE不会在环境中。在以后的启动中,最后一个参数将1MYDONE=1环境中。

答案2

您可以在单独的 .service 文件中定义第一次运行,使用

[Service]
Type=oneshot

然后创建另一个依赖于该文件的 .service 文件,该文件将是定期运行的文件。

相关内容