Watchdog kami me-restart layanan yang kami hentikan secara sengaja

Ops

Salah satu watchdog kami memulai layanan mana pun yang diaktifkan tetapi tidak berjalan. Dua kali pada bulan Oktober, ia memulai layanan yang kami hentikan secara sengaja. Pada kejadian kedua, pengunjung salah satu situs kami mengalami error selama sekitar 45 menit.

Mengapa watchdog itu ada

Layanan yang keluar dengan bersih saat menerima SIGTERM, misalnya karena sesuatu dihentikan berdasarkan namanya, tidak dianggap "gagal" oleh systemd. Restart=on-failure tidak mengembalikannya, dan systemctl --failed tidak mencantumkannya. Layanan itu tetap mati sampai seseorang kebetulan menyadarinya. Jadi, watchdog mencari layanan yang diaktifkan tetapi tidak berjalan, lalu memulainya.

Masalahnya adalah layanan yang Anda hentikan secara manual terlihat persis sama.

Kejadian pertama

Pada 7 Oktober, kami menghentikan worker video dengan systemctl stop pada pukul 12:47 untuk mengedit antrean kerjanya. Pada pukul 12:55, layanan itu sudah berjalan lagi: watchdog telah memulainya.

Kejadian kedua

Pada 21 Oktober, kami membutuhkan memori mesin yang juga melayani dua situs kami untuk pengujian model. Sebuah skrip menghentikan web app situs, job sinkronisasi, dan kontainer database, lagi-lagi dengan systemctl stop. Sekitar lima menit kemudian, sebuah Timer yang memantau situs, dan pada pukul 19:14 watchdog, mengembalikan tunnel dan web app.

Tunnel kembali menerima trafik, tetapi web app tidak dapat merespons: model yang diuji menahan 114 GiB memori mesin. Dari sekitar pukul 19:14 hingga 20:00, sebagian pengunjung mendapat error 502. Pada pukul 20:00, kami menonaktifkan tunnel, web app, dan job sinkronisasi, lalu menghentikan Timer pemantau.

Aturan yang kami gunakan sekarang

Dua jebakan systemd lain dari bulan yang sama

Factory Floor memantau layanan yang diaktifkan tetapi tidak berjalan. Secara default, ia hanya melaporkannya, dan hanya menjalankannya jika Anda mengaktifkan opsi tersebut. Sejak versi 1.0.3, peringatannya juga menjelaskan cara menjeda layanan secara sengaja, dan runbook-nya menyebutkan hal yang sama.

Diperbarui: