systemd - 在 oneshot 完成后禁用并重新启动

systemd - 在 oneshot 完成后禁用并重新启动

我想在脚本完成后重新启动计算机oneshot,并且当前服务不应在下次重新启动时启动。我创建了以下 systemd 单元文件

虚拟服务

[Unit]
Description=Custom Unit File Automation
Wants=multi-user.target
After=multi-user.target
SuccessAction=reboot

[Service]
User=veeru
Type=oneshot
RemainAfterExit=no
ExecStart=/bin/bash -c "<command> <args>"
StandardOutput=/var/log/command_out.log
StandardError=/var/log/command_err.log
ExecStartPost=/bin/bash -c "/usr/bin/sudo /usr/bin/systemctl disable /etc/systemd/system/playbook_2.service"


[Install]
WantedBy=multi-user.target

我能够禁用该服务systemctl。但无法重新启动机器,在 中status,我看到

Jun 28 01:45:55 hyddrogen systemd[1]: [/etc/systemd/system/dummy.service:5] Unknown lvalue 'SuccessAction' in section 'Unit'

是否有任何适当的选项来禁用服务并重新启动计算机。我可以插入rebootExecStartPost但我不想这样做

更新

SuccessAction从中得到了选择文档

答案1

经过一番挖掘,我找到了一种方法来做到这一点。这是我的单位文件

[Unit]
Description=Custom Unit File Automation
After=default.target
DefaultDependencies=no
Before=shutdown.target

[Service]
User=veeru
Type=oneshot
RemainAfterExit=no
ExecStart=/bin/bash -c "<command> <args>"
StandardOutput=file:/var/log/command_out.log
StandardError=file:/var/log/command_err.log
ExecStartPost=/usr/bin/sudo /usr/bin/systemctl disable /etc/systemd/system/dummy.service
ExecStop=/usr/bin/sudo /usr/sbin/reboot

[Install]
WantedBy=default.target

systemd“oneshot”服务触发关机,我添加了DefaultDependencies=noBefore=shutdown.target,在重新启动之前停止守护进程的更好方法

答案2

这个解决方案看起来有点老套。我无法理解为什么您需要一个调用重新启动的一次性服务,为什么不只使用脚本呢?

无论如何,如果你真的想作为一个 systemd 单元来执行此操作,你可以简单地让 oneshot 触摸一个文件,然后使用一个条件来检查该文件。

例如:

[Unit]
ConditionPathExists=/var/Custom_command.data

相关内容