長い間実行されるsystemdサービスがあります。これをと呼びますdb.service
。システムの起動時に起動できますが、手動で再起動することもできます。
また、データベースファイルの整合性チェックを実行するoneshot
サービス(このように呼びます)もあります。check.service
check.service
システムの起動時に実行する必要があり、起動中にdb.service
失敗した場合は起動しないでくださいcheck.service
。
しかし!ここに警告があります。check.service
手動サマリーを使用するときは実行しないでください。起動が失敗した場合でも、手動で起動する必要があります。db.service
systemctl restart db.service
db.service
check.service
質問
systemdサービスを使用してこれを達成する方法はありますか?
思考と観察
RequiredBy=db.service
inを使うとこれを達成できると思いますcheck.service
。ただし、check.service
起動時にはまだトリガーされます。db.service
db-boot.service
ブートdb.service
とcheck.service
. しかし、私は方法を知りませんでした。
答え1
あなたは一緒にcheck.service
いる必要があり、また、必要があり、注文する必要があります。Type=oneshot
RemainAfterExit=yes
WantedBy=db.service
Before=db.service
その後、起動時(またはデータベースが起動時に起動するように設定されていない場合は、データベースが最初に起動する前)が完了するまで実行し、状態をcheck.service
維持します。active (exited)
したがってdb.service
、再起動すると既にcheck.service
有効になっていて依存関係が満たされ、check.service
再起動されません。
この設定では、check.service
起動に失敗した場合はdb.service
起動しません(ただし、Want
依存関係が代わりに使用されるため、Require
システムの残りの部分はパニックモードに移行せず、正常に起動します)。後で手動で起動する場合は、まず正常に実行する必要がdb.service
あります。正常に実行したら、勝手に起動して停止できます。check.service
check.service
db.service
失敗したときに手動で起動できるdb.service
必要がある場合は、自動的にまったく起動しないように設定し、代わりに起動するように設定できます。check.service
db.service
systemctl disable db.service
WantedBy=db.service
check.service
check.service
sudo systemctl start db.service
そして、もし確認に成功しました。
これにより、手動起動時に実行する必要がある依存関係はcheck.service
ありませんが、データベースはスキャンが成功した場合(おそらく起動時に)のみ自動的に起動されます。db.service
check.service