我想要一个在首次运行和重新启动服务时表现不同的服务。这可以用 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
不会在环境中。在以后的启动中,最后一个参数将1
在MYDONE=1
环境中。
答案2
您可以在单独的 .service 文件中定义第一次运行,使用
[Service]
Type=oneshot
然后创建另一个依赖于该文件的 .service 文件,该文件将是定期运行的文件。