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

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

저는 Postgres 데이터베이스를 사용하는 프로그램을 작성하고 이에 대한 시스템 서비스 파일을 작성했습니다. 현재 내 서비스는 부팅 시 제대로 시작되고 apt upgradePostgres가 업그레이드를 중지하면 중지됩니다. 그러나 업그레이드가 완료되고 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.servicePostgres를 추가 한 다음 수동으로 중지하고 시작하려고 시도했지만 BindsTo=postgresql.service둘 다 도움이 되지 않았습니다.

물론 삭제할 수도 있지만 Requires, 둘 다 다시 시작할 수 있다면 두 서비스를 모두 중지하는 것이 더 나을 것입니다.

답변1

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

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는 시스템이 부팅될 때 시작됩니다.

관련 정보