Meidän vahti käynnisti uudelleen palvelut, jotka olimme pysäyttäneet tarkoituksella
Ylläpito
Yksi vahteistamme käynnistää minkä tahansa palveluistamme, joka on otettu käyttöön mutta ei ole käynnissä. Kahdesti lokakuussa se käynnisti palveluita, jotka olimme pysäyttäneet tarkoituksella. Toisella kerralla yhden sivustomme kävijät saivat virheitä noin 45 minuutin ajan.
Miksi tämä vahti on olemassa
Palvelu, joka poistuu puhtaasti SIGTERM-signaalin saatuaan, esimerkiksi koska jokin tappoi sen nimellä, ei ole systemdin näkökulmasta "failed". Restart=on-failure ei tuo sitä takaisin, eikä systemctl --failed listaa sitä. Se pysyy alhaalla, kunnes joku sattuu huomaamaan sen. Siksi vahti etsii palveluita, jotka on otettu käyttöön mutta eivät ole käynnissä, ja käynnistää ne.
Ongelma on, että käsin pysäyttämäsi palvelu näyttää täsmälleen samalta.
Ensimmäinen kerta
7. lokakuuta pysäytimme videotyöntekijän komennolla systemctl stop kello 12:47 muokataksemme sen työhonoa. Kello 12:55 se oli jälleen käynnissä: vahti oli käynnistänyt sen.
Toinen kerta
21. lokakuuta tarvitsimme koneen muistia, joka palvelee myös kahta sivustoamme, mallitestia varten. Skripti pysäytti sivustojen web-sovellukset, synkronointityön ja tietokantasäiliön jälleen komennolla systemctl stop. Noin viiden minuutin kuluttua sivustoja valvova ajastin ja kello 19:14 vahti toivat tunnelin ja web-sovellukset takaisin.
Tunneli otti liikenteen jälleen vastaan, mutta web-sovellukset eivät pystyneet vastaamaan: testattava malli piti hallussaan 114 GiB koneen muistista. Noin kello 19:14–20:00 jotkut kävijät saivat 502-virheitä. Kello 20:00 poistimme tunnelin, web-sovellukset ja synkronointityön käytöstä ja pysäytimme valvonta-ajastimen.
Sääntö, jota käytämme nyt
- Pysäytä palvelu poistamalla se käytöstä:
sudo systemctl disable --now <unit>. Tuo se takaisin komennollasudo systemctl enable --now <unit>. Vahtimme tarkastelee vain käyttöön otettuja palveluita, joten käytöstä poistettu jätetään rauhaan. - Pysäytä kaikki, mikä voi tuoda sen takaisin: sen edessä oleva tunneli ja kaikki sitä valvovat ajastimet.
- Lyhyt pysäytys on kilpajuoksu. Jos käytät vain komentoa
stop, lopeta ennen seuraavaa tarkistusta, joka koneillamme tapahtuu minuuttien kuluessa.
Kaksi muuta systemd-anskaa samoilta kuukausilta
systemctl mask --runtimeei tee mitään yksikötiedostolle, joka on hakemistossa /etc/systemd/system. Hakemiston /etc yksiköt ovat etusijalla hakemiston /run runtime-peittoon nähden, joten komento onnistuu ja palvelu käynnistyy silti. Pidättääksesi palvelun käytämme drop-in-tiedostoa, jossa onConditionPathExists=!/etc/<name>.hold: niin kauan kuin tuo tiedosto on olemassa, palvelu ei käynnisty, ei käynnistyksessä eikä käsin.systemctl is-activekutsuu käynnissä olevaa oneshot-palvelua passiiviseksi. KunType=oneshot-palvelu on käynnissä, sen tila on "activating", jotenis-activetulostaa sen ja palauttaa arvon 3. Silmukka kutenwhile systemctl is-active --quiet job.service; do sleep 60; done, jonka on tarkoitus odottaa yötyötä, poistuu heti. Lue sen sijaan tila: active, activating, reloading tai deactivating tarkoittavat kaikki, että se on vielä käynnissä.
Factory Floor valvoo käytössä olevia palveluita, jotka eivät ole käynnissä. Oletuksena se vain raportoi niistä, ja käynnistää ne vain, jos otat tämän asetuksen käyttöön. Versiosta 1.0.3 lähtien sen hälytys kertoo myös, kuinka palvelun voi pysäyttää tarkoituksella, ja sen runbook kertoo saman.