나는 postgresql 데이터베이스에 대한 시스템 종료 스크립트(유닛 파일)를 개발 중입니다. 다음 두 기사를 따랐지만 작동시키지 못했습니다.
종료하기 전에 systemd를 사용하여 스크립트를 실행하는 방법은 무엇입니까?
Postgresql 설치 시 수행한 작업은 다음과 같습니다. 시작 시 postgresql 데이터베이스 클러스터를 시작하는 시작 스크립트를 작성했지만 아래 표시된 종료 스크립트는 종료 시 작동하지 않는 것 같습니다. systemctl start service_name으로 실행하면 제대로 작동합니다.
데이터베이스 로그를 보면 "LOG: Smart shutdown request received" 메시지가 표시됩니다. 이는 데이터베이스 클러스터가 일반 모드에서 종료될 때 발생하며 "호스트 종료"를 사용하여 OS를 종료할 때 발생하는 현상입니다. 즉시 종료 -h". 내가 보고 싶은 것은 systemctl start service_name을 사용하여 스크립트를 실행할 때 발생하는 빠른(즉시 모드) 종료인 "LOG: Fast shutdown request received"입니다.
이것은 유닛 파일 정의입니다
[Unit]
Description=Database Shutdown
Before=shutdown.target reboot.target halt.target
DefaultDependencies=no
[Service]
ExecStart=/usr/bin/su - postgres -c "/opt/postgres-95/bin/pg_ctl -D /database/inst1/data -w stop &"
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=shutdown.target
또한 해당 섹션을 삭제하려고 시도했지만 systemctl에서는 해당 섹션이 없으면 서비스를 활성화할 [Install]
수 없습니다 . [Install]
누군가 나에게 올바른 방향을 알려줄 수 있습니까?
답변1
systemd
이러한 상황을 깔끔하게 처리하도록 설계되었습니다. PostgreSQL 서비스가 중지될 때 실행할 명령을 지정하는 작은 파일을 생성하면 됩니다. 먼저 다음과 같은 디렉터리를 만듭니다.
/etc/systemd/system/postgresql.d/
.conf
예를 들어 다음 custom-shutdown.conf
과 같이 파일에 몇 줄을 추가합니다.
[Service]
ExecStop=/usr/bin/su - postgres -c "/opt/postgres-95/bin/pg_ctl -D /database/inst1/data -w stop &"
ExecStopPost=
상황에 따라 활용 하시면 좋을 것 같습니다 .