Saya telah menulis sebuah program yang menggunakan database Postgres, dan saya menulis file layanan systemd untuk itu. Saat ini layanan saya memulai boot dengan baik, dan terhenti ketika Postgres dihentikan untuk peningkatan (oleh apt upgrade
). Namun, ketika pembaruan selesai dan Postgres dimulai lagi, layanan saya tidak secara otomatis dimulai.
Bisakah saya mendefinisikan beberapa ketergantungan untuk memulai layanan saya secara otomatis?
Ini adalah status layanan saya setelah dihentikan secara otomatis selama peningkatan 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)
Perhatikan bahwa saya dapat secara manual memulai layanan lagi dengan baik.
Ini file layanan saya:
[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
Saya sudah mencoba menambahkan PartOf=postgresql.service
dan BindsTo=postgresql.service
, kemudian secara manual menghentikan dan memulai Postgres, tetapi tidak ada yang membantu.
Tentu saja saya bisa menghapus Requires
, tetapi menghentikan kedua layanan bersama lebih disukai, jika saja mereka berdua akan mulai kembali.
Requires=
dihapus, itu tidak membantu. Saya pikir masalahnya adalah PartOf=
tautan "menghentikan dan memulai kembali unit", tetapi Postgres tidak dimulai kembali saat peningkatan. Berhenti, ditingkatkan, dan dimulai.
systemctl restart postgresql
, systemd ingat untuk memulai kembali layanan dependennya lagi. Sepertinya tepat, untuk beberapa alasan, melakukan kombinasi stop
dan start
bukan restart
.
PartOf=
terdengar seperti solusi yang tepat. Apakah Anda mencobanya denganRequires=
dihapus?