PostgreSQL에 대한 사용자의 지속적인 시스템 종속성

PostgreSQL에 대한 사용자의 지속적인 시스템 종속성

Ubuntu Server 17.10에 사용자 계정이 있고 사용자 지연이 활성화되어 있습니다.체계, 제 생각에는 이는 훌륭한 기능입니다. 그러나 문서화가 잘 되어 있지 않습니다. 명령을 사용하여 해당 사용자로 서비스를 수동으로 시작하는 동안 systemctl --user ...종속성 문제가 발생했습니다.

~/.config/systemd/user/foobar.service종속성은 다음과 같이 설정됩니다.

[Unit]
Decription=StackExchange Foo Bar
After=network.target
# Some non-relevant stuff removed
[Install]
WantedBy=default.target

내가 posgresql.service그것을 넣었을 때 그것을 몰랐다고 말하면서 실패했습니다. 나는 방황하는 시스템이 시스템 전체 서비스를 보지 못하는 다른 답변에서 발견했습니다. 일반 시스템 대상만 있으므로 WantedBy를 로 설정해야 합니다 default.target. 하지만 해당 설정을 사용하면 시스템 전체 Postgresql에 적시에 연결할 수 없기 때문에 부팅 시 서비스(실제 애플리케이션) 자체가 시작되지 않습니다. ].

그래서,진짜 문제는:시작할 때마다 PosgreSQL에 종속되도록 이 모든 것을 지연 모드로 설정하려면 어떻게 해야 합니까? 어떤 방식으로든 설정 가능가짜 postgreql.service어떤 방식으로든 System One과 연결되나요? 다른 방법이 있나요? 어떤 조언이라도 환영합니다.

편집: Postgresql은 사용자 계정을 통한 서비스가 아닌 시스템 전체 애플리케이션으로 실행됩니다.

답변1

PostgreSQL이 필요한 대상을 다음과 같이 정의합니다.

$ cat postgresql.target
[Unit]
Description=Emergency Mode with Networking
Requires=network.target postgresql.service
After=postgresql.service
AllowIsolate=yes

서비스에 다음을 추가합니다.

[Unit]
Decription=StackExchange Foo Bar
After=network.target postgresql.target
# Some non-relevant stuff removed
[Install]
WantedBy=default.target

편집(댓글 이후):

위의 내용은 올바르지 않습니다. 사용자 공간의 systemd는 모든 대상을 볼 수 있다고 가정했습니다.

조사 결과 다음 대상만 알려진 것으로 보입니다.

기본.대상, 종료.대상, 소켓.대상, 타이머.대상, 경로.대상, 블루투스.대상, 프린터.대상, 스마트카드.대상, 사운드.대상.

이는 위의 의미 있는 목표에 이를 추가해야 함을 의미합니다 . AFTER 이후 postgresql.service에 추가하고 sockets.target시작 하며 AFTER 이후에 도달합니다 .foobar.servicedefault.targetsockets.target

에 추가하려면 postgresql.service에 추가 한 다음 systemd 구성을 업데이트 sockets.target해야 합니다 .sockets.targetWantedBy=postgresql.service

또 다른 옵션 에는 포트가 열려 있으면 nc -z <host> <port>반환되는 netcat이 필요합니다 0. 스크립트에서 PostgreSQL 포트가 닫혀 있는 동안 서비스가 실행되고 루프만 반복됩니다. 포트가 열리면 1~2초 정도 더 기다립니다. 실용적입니다) 그런 다음 서비스가 해야 할 일을 하도록 하세요.

관련 정보