我想在脚本完成后重新启动计算机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'
是否有任何适当的选项来禁用服务并重新启动计算机。我可以插入reboot
,ExecStartPost
但我不想这样做
更新
我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=no
和Before=shutdown.target
,在重新启动之前停止守护进程的更好方法
答案2
这个解决方案看起来有点老套。我无法理解为什么您需要一个调用重新启动的一次性服务,为什么不只使用脚本呢?
无论如何,如果你真的想作为一个 systemd 单元来执行此操作,你可以简单地让 oneshot 触摸一个文件,然后使用一个条件来检查该文件。
例如:
[Unit]
ConditionPathExists=/var/Custom_command.data