我有一个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可以执行脚本来确定服务是否应该有条件地启动,那么这似乎更直观。
是否有针对此的解决方法,不涉及在文件系统上删除文件?
我看到的唯一两个选择是:
ExecStartPost
,touch
文件系统上的文件作为标记,然后ConditionPathExists=!/path
。有没有办法让SystemD调用脚本来确定它是否应该执行一个单元?
答案 0 :(得分:0)
对于systemd v243及更高版本(后#12933),您可以使用ExecCondition
:
ExecCondition=sh -c '! blkid -t TYPE=ext4 | grep -q xvdb'
请注意systemd如何解释command lines和special executable prefixes,这在情况下可能是有用的(或令人惊讶的)。