単一のサービスに対して複数の単位ファイルをシステム化しました。

単一のサービスに対して複数の単位ファイルをシステム化しました。

標準単位ファイルを介して systemd でサービスを管理する SLES 12 SP3 システムに postgresql データベースがあります。サービスが失敗した場合は自動的に再起動したいので、ディレクトリを作成してください。/etc/systemd/system/postgresql.service.d/psql.conf以下の内容が含まれています。

[Service]
Restart=on-failure

これは効果的で幸せです。これで、マスターデバイスに障害が発生した場合にスレーブデバイスが待機する高可用性システムを設定する必要があります。 HAタスクチームは、クラスタの設定時にサービスを監視し、postgresqlが停止したときにスレーブにフェールオーバーする予定であるため、サービス再起動フラグを無効にするように要求しました。だからファイルを作成しました。/etc/systemd/system/potgresqlHA.serviceHAチームが使用を開始する既存のユニットファイルのコピー。

systemctl start/stop/restart/status postgresqlHA

これで、要求に応じてデータベースをバックアップできるスクリプトがあります。このスクリプトは、バックアップする前に postgresql の状態をチェックし、サービスが実行されていることを確認します。

systemctl status postgresql

この方法は、クラスタが設定されていない場合に有効です。ただし、クラスターが設定されるとpostgresqlHAが開始されたサービスであるため、サービスが停止しています。

実行しているデータベースサービスに関係なく、バックアップスクリプトが機能するようにするにはどうすればよいですか?管理を容易にするために、ユニットファイルの1つに設定できるものはありますか?

別のスクリプトで異なるサービス(apache2、tomcatなど)の状態を確認しているときに同じ問題が発生しました。

ありがとう、アビシェク

ベストアンサー1

systemctl status postgresqlバックアップスクリプトのテストをこのように変更するとどうなりますか?

...
if systemctl is-active postgresql
then
    echo "PostgreSQL is active in non-clustered mode"
    # add here any pre-backup commands specific to non-clustered mode
elif systemctl is-active postgresqlHA
then
    echo "PostgreSQL is active in HA mode"
    # add here any pre-backup command specific to HA mode
else
    echo "PostgreSQL backup FAILURE: PostgreSQL is not running." >&2
    # add any commands to send a backup failure alert here if necessary
    exit 69 # EX_UNAVAILABLE
fi
# commands to run the backup here
...

これは主にインタラクティブな使用のために設計されており、スクリプトsystemctl status <service...>にとってより便利です。複数のサービスがリストされ、1 つ以上のサービスが基準を満たしている場合、コマンドはゼロ結果コードを返します。systemctl is-active <service...>systemctl is-failed <service>

実行しているサービスのバージョンを気にする必要がない場合は、同時にテストすることもできます。

...
if ! systemctl is-active postgresql postgresqlHA
then
    echo "PostgreSQL backup FAILURE: neither clustered or non-clustered service is running." >&2
    exit 69 # EX_UNAVAILABLE
fi
# commands to run the backup here
...

おすすめ記事