我想将一次性服务设置为活动状态,即使 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 为已经是主驱动器返回的退出代码并将其添加到列表中。