手动将失败的 systemd 单元标记为活动

手动将失败的 systemd 单元标记为活动

我想将一次性服务设置为活动状态,即使 systemd 将其标记为失败。我该如何存档?

背景:

带有 DRBD 的双节点集群。过去,DRBD 的状态由一个简单的脚本管理,例如:

# active.sh
drbdadm primary all
mount /dev/drbd0

# inactive:
umount /dev/drbd0
drbdadm secondary all

现在我已将此逻辑转换为一次性的 systemd 单元。问题是,在当前主节点上,此服务的启动失败,因为 drbdadm 返回了设备已处于主状态的错误代码。

这在正常运行时是必需的,但这不是第一次。我想将服务设置为活动状态,因为它实际上是活动的。Systemd 不知道这一点(这完全没问题,我只需要一种方法来告诉他它正在运行)。

答案1

有无数个systemd选项,因此您也许能够找到“忽略错误”的选项。

否则,一个简单的方法是创建一个自定义启动器脚本,类似于您以前使用的(active.sh)。然后指向systemd启动器脚本。

启动器可以处理任何错误,并决定应该通过退出代码传播到哪个错误(如果有的话)systemd(即脚本的最后一行应该是exit 0

换句话说,脚本只是忽略drbdadm错误并继续执行mount

为了整洁起见,脚本中的最后一条命令(例如mount)可以是exec mount ...

答案2

我相信你在这里寻找的指令是成功退出状态。您只需找出 drbdadm 为已经是主驱动器返回的退出代码并将其添加到列表中。

相关内容