Naš nadzorni proces je ponovo pokrenuo servise koje smo namerno zaustavili

Operacije

Jedan od naših nadzornih procesa pokreće svaki naš servis koji je omogućen, ali ne radi. Dva puta u oktobru pokrenuo je servise koje smo namerno zaustavili. Drugi put, posetioci jednog od naših sajtova dobijali su greške oko 45 minuta.

Zašto taj nadzorni proces postoji

Servis koji se uredno završi kada primi SIGTERM, na primer zato što ga je nešto ubilo po imenu, za systemd nije „neuspeo“. Restart=on-failure ga ne vraća, a systemctl --failed ga ne navodi. Ostaje ugašen dok ga neko slučajno ne primeti. Zato nadzorni proces traži servise koji su omogućeni, ali ne rade, i pokreće ih.

Problem je u tome što servis koji ste ručno zaustavili izgleda potpuno isto.

Prvi put

7. oktobra zaustavili smo video radnika pomoću systemctl stop u 12:47 da bismo izmenili njegov red poslova. U 12:55 ponovo je radio: nadzorni proces ga je pokrenuo.

Drugi put

21. oktobra bila nam je potrebna memorija mašine koja takođe opslužuje dva naša sajta za testiranje modela. Skripta je zaustavila veb aplikacije sajtova, posao sinhronizacije i kontejner baze podataka, ponovo pomoću systemctl stop. Otprilike pet minuta kasnije tajmer koji prati sajtove, a u 19:14 i nadzorni proces, vratili su tunel i veb aplikacije.

Tunel je ponovo primao saobraćaj, ali veb aplikacije nisu mogle da odgovore: model pod testom zauzimao je 114 GiB memorije mašine. Od oko 19:14 do 20:00, neki posetioci su dobijali greške 502. U 20:00 onemogućili smo tunel, veb aplikacije i posao sinhronizacije, i zaustavili tajmer za praćenje.

Pravilo koje sada koristimo

Još dve systemd zamke iz istih meseci

Factory Floor prati omogućene servise koji ne rade. Podrazumevano ih samo prijavljuje, a pokreće ih samo ako to omogućite. Od verzije 1.0.3 njegovo obaveštenje takođe navodi kako namerno pauzirati servis, a njegov runbook kaže isto.

Ažurirano: