종료 직전에 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: received smart shutdown request"라는 메시지가 표시됩니다. 이는 데이터베이스 클러스터가 일반 모드에서 다운될 때 나타나는 메시지입니다. 이는 "" 명령으로 호스트를 종료할 때 운영 체제를 종료하는 작업입니다. 지금 종료 -h". 내가 보고 싶은 것은 systemctl start service_name을 사용하여 스크립트를 실행할 때 발생하는 빠른(즉시 모드) 종료인 "LOG: received fast shutdown request"입니다.

다음은 유닛 파일 정의입니다.

[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

또한 해당 섹션을 버리려고 했지만 [Install]systemctl에서 해당 [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=.

관련 정보