Saya memiliki masalah yang sangat aneh systemd
. Ketika saya mengeluarkannya, systemctl restart
itu akan memulai proses baru sebelum yang sebelumnya selesai.
Ini dapat dilihat di log, di mana pesan penutupan terakhir ("log penutupan") dicatat setelah pesan pembuka ("log pembuka").
Apakah ada cara untuk menambahkan penundaan antara penghentian dan dimulainya proses?
systemctl stop myservice && sleep 3 && systemctl start myservice
Jawaban:
Dalam file layanan systemd Anda, Anda dapat mengatur opsi RestartSec untuk menambahkan penundaan untuk restart. Lihat contoh di bawah ini:
Periksa tautan ini untuk lebih banyak contoh.
sumber
RestartSec
hanya berlaku untuk layanan yang dikonfigurasikan denganRestart=
arahan dan tidak diperhitungkan saat melakukan asystemctl restart someservice
RestartSec tampaknya hanya digunakan jika layanan tertentu itu yang direstart melalui perintah restart systemctl.
Misalnya, saya punya dua layanan, A dan B.
dan
Jika Anda melakukan systemctl restart B, itu berfungsi seperti yang diharapkan ... tetapi jika Anda melakukan systemctl restart A, kedua layanan dihentikan dan segera mulai lagi, tanpa penundaan.
Systemd tampaknya hanya menggunakan nilai konfigurasi untuk satu layanan yang Anda tentukan, dan mengabaikannya untuk setiap dependensi.
Ini tidak biasa seperti kedengarannya. Jika B berbicara ke server jarak jauh, memulai dan menghentikan dengan cepat dapat gagal karena ujung jarak jauh menolak klien. Tetapi memulai ulang A secara langsung akan terjadi setiap kali A diperbarui tanpa perubahan ke B.
Anda mungkin dapat mengatasi ini dengan menambahkan penundaan ke A juga, tetapi Anda tidak perlu PERLU untuk melakukan ini, karena itu merusak isolasi objek dengan membuat A tahu tentang B ketika itu bukan ketergantungan.
sumber