종료하기 전에 systemd 서비스를 시작하십시오.

종료하기 전에 systemd 서비스를 시작하십시오.

나는 postgresql 데이터베이스에 대한 시스템 종료 스크립트(유닛 파일)를 개발 중입니다. 다음 두 기사를 따랐지만 작동시키지 못했습니다.

종료하기 전에 systemd를 사용하여 스크립트를 실행하는 방법은 무엇입니까?

https://superuser.com/questions/1016827/how-do-i-run-a-script-before-everything-else-on-shutdown-with-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=상황에 따라 활용 하시면 좋을 것 같습니다 .

공식문서를 참고해주세요확장된 기본 구성및 공식 문서ExecStop=그리고 ExecStopPost=.

관련 정보