단일 서비스에 대해 여러 단위 파일을 시스템화했습니다.

단일 서비스에 대해 여러 단위 파일을 시스템화했습니다.

표준 단위 파일을 통해 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가 시작된 서비스이므로 서비스가 중지된 상태입니다.

실행 중인 데이터베이스 서비스에 관계없이 백업 스크립트가 작동하도록 하려면 어떻게 해야 합니까? 관리를 더 쉽게 하기 위해 유닛 파일 중 하나에 구성할 수 있는 것이 있습니까?

다른 스크립트에서 다른 서비스(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...>에 더 편리할 수 있습니다 . 여러 서비스가 나열되고 하나 이상의 서비스가 기준을 충족하는 경우 명령은 0 결과 코드를 반환합니다.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
...

관련 정보