脚本状态的条件



i有一个SystemD单元,该单元格式化了云中的文件系统。

根据SystemD单元文档,存在许多不同的Condition*参数,这些参数可以确定它们是否应该运行。我需要能够确定/dev/xvdb是否格式化为Ext4,而我发现这样做的唯一方法是这样做:

if ! blkid -t TYPE=ext4 | grep xvdb >/dev/null; then
    mkfs.ext4 /dev/xvdb
fi

虽然我可以在文件系统上的某个地方放置此bash脚本,但如果SystemD可以执行脚本来确定服务是否应有条件地启动。

,它似乎更加直观。

是否有解决方案的解决方法,这不涉及在文件系统上删除文件?

我看到的唯一两个选择是:

  1. 在文件系统上删除bash脚本,该脚本总是在必要时返回0,仅返回格式。
  2. 使用ExecStartPosttouch文件系统上的文件作为标签,然后用作ConditionPathExists=!/path

有没有办法让Systemd调用脚本来确定是否应该执行单元?

使用SystemD V243及以后(Post-#12933)您可以使用ExecCondition

ExecCondition=sh -c '! blkid -t TYPE=ext4 | grep -q xvdb'

注意SystemD如何解释命令行和特殊可执行前缀,在条件下可能有用(或令人惊讶)。

最新更新