종속성이 업그레이드 될 때 시스템 서비스를 다시 시작하는 방법


11

Postgres 데이터베이스를 사용하는 프로그램을 작성했으며 시스템화 된 서비스 파일을 작성했습니다. 현재 내 서비스는 부팅시 정상적으로 시작되며 Postgres가 업그레이드를 위해 (by apt upgrade) 중지되면 중지됩니다 . 그러나 업그레이드가 완료되고 Postgres가 다시 시작되면 서비스가 자동으로 시작되지 않습니다.

서비스를 자동으로 다시 시작하도록 일부 종속성을 정의 할 수 있습니까?

Postgres 업그레이드 중에 서비스가 자동으로 중지 된 후의 서비스 상태입니다.

● tabill.service - My service
   Loaded: loaded (/srv/tabill/tabill.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Tue 2017-07-04 00:29:24 EEST; 44min ago
 Main PID: 1048 (code=killed, signal=TERM)

서비스를 수동으로 다시 시작할 수 있습니다.

내 서비스 파일은 다음과 같습니다.

[Unit]
Description=My service
Wants=nginx.service
Requires=postgresql.service
After=postgresql.service

[Service]
Type=simple
ExecStart=/srv/tabill/app/serve
Restart=always
TimeoutSec=60

[Install]
WantedBy=multi-user.target

나는 추가 해봤 PartOf=postgresql.service하고 BindsTo=postgresql.service, 다음 수동으로 중지하고 포스트 그레스를 시작하지만, 둘 다 도움이되지 않습니다.

물론을 제거 할 수는 Requires있지만 둘 다 다시 시작하는 경우 두 서비스를 함께 중지하는 것이 좋습니다.


PartOf=올바른 솔루션처럼 들립니다. Requires=제거한 상태로 사용해 보셨습니까 ?
meuh

@meuh 나는 그것을 Requires=제거 하고 지금 시도했지만 도움이되지 않았다. 문제는 PartOf=링크 "장치 중지 및 재시작"이지만 Postgres는 업그레이드 중에 다시 시작 되지 않는다는 것 입니다. 중지, 업그레이드 및 시작되었습니다.
Rennex

흥미롭게도 systemctl restart postgresqlsystemd는 종속 서비스를 다시 시작해야한다는 것을 기억합니다. 어떤 이유로, 조합 않는 경향이 보인다 stopstart대신을 restart.
WGH

답변:


13

답을 찾았습니다. 서비스 파일의 마지막 줄을 다음과 같이 변경해야했습니다.

WantedBy=postgresql.service

이렇게하면 Postgres가 시작될 때마다 내 서비스도 시작되지만 서비스가 실패하더라도 Postgres가 중지되지 않습니다.

[Install]섹션의 지시문 은 장치 활성화 및 비활성화에만 영향을줍니다. 그러나 내 서비스가 이미 활성화되어있을 때 이것이 간단하지 않았습니다.

# systemctl enable tabill.service
Failed to execute operation: Too many levels of symbolic links

오류 메시지가 잘못되었습니다. 그것을 고치는 것은 간단했다 :

# systemctl disable tabill.service
Removed symlink /etc/systemd/system/tabill.service.
Removed symlink /etc/systemd/system/multi-user.target.wants/tabill.service.

# systemctl enable tabill.service
Failed to execute operation: No such file or directory

# systemctl enable /srv/tabill/tabill.service
Created symlink from /etc/systemd/system/postgresql.service.wants/tabill.service to /srv/tabill/tabill.service.
Created symlink from /etc/systemd/system/tabill.service to /srv/tabill/tabill.service.

이제 Postgres가 할 때마다 내 서비스가 중지되고 시작됩니다. 그리고 자연스럽게 Postgres는 시스템 부팅시 시작합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.