脚本状态的条件?

时间:2016-12-09 19:44:54

标签: systemd

我有一个SystemD单元,用于格式化云中的文件系统。

根据the systemd unit documentation,单元可以接受许多不同的Condition*个参数来确定它们是否应该运行。我需要能够确定/dev/xvdb是否格式化为ext4,我发现这样做的唯一方法就是做这样的事情:

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

虽然我可以在文件系统的某处删除这个bash脚本,但是如果SystemD可以执行脚本来确定服务是否应该有条件地启动,那么这似乎更直观。

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

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

  1. 在文件系统上删除一个总是返回0的bash脚本,并且只在必要时才格式化。
  2. 使用ExecStartPosttouch文件系统上的文件作为标记,然后ConditionPathExists=!/path
  3. 有没有办法让SystemD调用脚本来确定它是否应该执行一个单元?

1 个答案:

答案 0 :(得分:0)

对于systemd v243及更高版本(后#12933),您可以使用ExecCondition

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

请注意systemd如何解释command linesspecial executable prefixes,这在情况下可能是有用的(或令人惊讶的)。

相关问题