Tôi đã viết một chương trình sử dụng cơ sở dữ liệu Postgres và tôi đã viết một tệp dịch vụ systemd cho nó. Hiện tại dịch vụ của tôi đã bắt đầu khởi động tốt và nó bị dừng khi Postgres bị dừng để nâng cấp (bởi apt upgrade
). Tuy nhiên, khi quá trình nâng cấp hoàn tất và Postgres được bắt đầu lại, dịch vụ của tôi không tự động bắt đầu.
Tôi có thể xác định một số phụ thuộc để dịch vụ của tôi bắt đầu lại tự động không?
Đây là trạng thái dịch vụ của tôi sau khi nó tự động bị dừng trong quá trình nâng cấp 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)
Lưu ý rằng tôi có thể tự khởi động lại dịch vụ một cách tốt đẹp.
Đây là tập tin dịch vụ của tôi:
[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
Tôi đã thử thêm PartOf=postgresql.service
và BindsTo=postgresql.service
sau đó dừng thủ công và bắt đầu Postgres, nhưng không giúp được gì.
Tất nhiên tôi có thể loại bỏ Requires
, nhưng dừng cả hai dịch vụ lại với nhau thì tốt hơn, nếu chỉ cả hai sẽ bắt đầu sao lưu.
Requires=
gỡ bỏ, điều đó không giúp được gì. Tôi nghĩ vấn đề là PartOf=
các liên kết "dừng và khởi động lại các đơn vị", nhưng Postgres không được khởi động lại trong quá trình nâng cấp. Nó dừng lại, nâng cấp và bắt đầu.
systemctl restart postgresql
, systemd nhớ để khởi động lại các dịch vụ phụ thuộc của nó một lần nữa. Có vẻ như apt, vì một số lý do, không kết hợp stop
và start
thay vì restart
.
PartOf=
Nghe có vẻ là giải pháp đúng đắn. Bạn đã thử nó vớiRequires=
loại bỏ?