Työ käynnistyy kirjautumisessa, loki näyttää asiakkaan käynnistyvän, eikä tunneli nouse koskaan. Tai se nousee ja katoaa muutamaa sekuntia myöhemmin. Molemmissa tapauksissa ominaisuusluettelo oli luultavasti kunnossa. launchd antoi kaksi lupausta hyväksyessään työn: se valvoo prosessia, ja se prosessi pysyy käynnissä. VPN tarvitsee molemmat, eikä oikea XML-tiedosto tarjoa kumpaakaan.

Kelvollinen ominaisuusluettelo ei ole toimiva palvelu

plutil -lint tarkistaa rakenteen. Se ei voi kertoa, onko binääri olemassa, tukevatko argumentit tätä asiakasversiota tai käynnistyykö työ ympäristössä, jossa tunnistetiedot ovat saatavilla. Ne ovat semanttisia kysymyksiä, ja ne selittävät useimmat viat, jotka näyttävät launchd-ongelmilta.

plutil -lint /Library/LaunchDaemons/com.example.vpn.plist
launchctl print system/com.example.vpn

Lue toisen komennon tuloste sen sijaan, että olettaisit työn latautuneen. Se kertoo viimeisen poistumistilan ja sen, onko palvelu käynnissä, mikä erottaa “ei koskaan käynnistynyt” ja “käynnistyi ja kuoli” ennen kuin kosket profiiliin.

Agentit perivät käyttäjäistunnon, taustapalvelut eivät

Applen launchd-dokumentaatio erottaa käyttäjäkohtaiset agentit järjestelmän taustapalveluista. Agentti toimii kirjautuneen käyttäjän ympäristössä tämän avainnipun ja ympäristön kanssa. Taustapalvelu toimii ilman tätä istuntoa, eikä työn siirtäminen järjestelmähakemistoon luo uudelleen käyttäjän vuorovaikutteisia tunnistetietoja.

Tämä ero ratkaisee suunnittelun. Jos yhteys vaatii, että ihminen kirjautuu sisään tai hyväksyy MFA-pyynnön, tuettu järjestely on käyttäjäistunnossa toimiva työ, joka käynnistyy kirjautumisen jälkeen. Jos sen on toimittava ilman ketään kirjautunutta, asiakas tarvitsee hyväksytyn valvomattoman identiteetin, jolla on oma uusimis- ja peruutusprosessinsa. Väärän rivin valitseminen tuottaa työn, joka käynnistyy puhtaasti ja epäonnistuu ensimmäisessä todennusvaiheessa.

Älä peitä eroa salasanalla argumenttitaulukossa tai kytkemällä varmenteiden tarkistukset pois. Molemmat tekevät todennusvaatimuksesta pysyvän salaisuuden luettavaan tiedostoon, ja jälkimmäinen tarkoittaa, että tunneli todentaa kaiken, mikä vastaa.

Valvonta toimii vain, jos prosessi pysyy edessä

Asiakas, joka muuttaa itsensä taustapalveluksi, palauttaa ohjauksen launchdille heti, ja valvoja katselee silloin prosessia, joka on jo poistunut. Tunneli voi olla ylhäällä, mutta launchd luulee työn epäonnistuneen, ja sen uudelleenkäynnistyskäytäntö tekee jotain, mitä et tarkoittanut.

Käytä asiakkaan dokumentoitua etuala- tai palvelutilaa. Jos tuotteella on oma tuettu käynnistysominaisuus, se osaa jo pysyä etualalla ja luovuttaa verkkopinolle; mukautettu työ on erillinen suunnittelu, ei sen parannus.

Anna työlle ainutkertainen tunniste, aiottu suoritettava tiedosto ja harkittu argumenttitaulukko. Taulukko ei ole shellin komentorivi, joten putket ja uudelleenohjaukset eivät toimi siinä ja lainausmerkit käyttäytyvät eri tavoin. Komento, joka onnistuu järjestelmänvalvojan päätteessä, on parhaimmillaankin alustava tarkistus.

Tunnistetietojen on toimittava ilman kehotetta

Valvomaton toiminta siirtää tunnistetieto-ongelman sen poistamisen sijaan. Jonkun on omistettava identiteetti, päätettävä sen elinikä ja dokumentoitava, miten se korvataan. Varmenne ilman vanhenemisen seurantaa muuttuu katkokseksi, jolla on päivämäärä kalenterissa.

Pidä salaisuudet poissa argumenteista ja työn vaki tulosteesta. Jos asiakas tukee tunnistetiedon lukemista suojatusta säilöstä, käytä sitä polkua ja tarkista, että työn suoritusympäristö tavoittaa säilön. Rootina toimiva taustapalvelu ei yleensä voi lukea kirjautumisen avainnipun kohdetta, ja se on juuri se yksityiskohta, joka paljastuu vain järjestelmäympäristössä.

Määrittele, mitä valmius tarkoittaa, ja testaa sitä siellä

Onnistunut käynnistys todistaa, että prosessi alkoi. Se ei todista, että verkko on ylhäällä, että yhdyskäytävä hyväksyi identiteetin tai että yksityinen sovellus on tavoitettavissa. Jos jokin muu riippuu tunnelista, se tarvitsee valmiussignaalin, joka heijastaa yhteyttä, ei työn alkamisaikaa.

Uudelleenyritysten on oltava rajoitettuja ja erotettava puuttuva verkko hylätystä tunnistetiedosta. Uudelleenkäynnistys jokaisella virheellä ei korjaa vanhentunutta varmennetta ja tuottaa lokin täynnä samanlaisia yrityksiä, joka kätkee todellisen.

Hyväksy työ siinä ympäristössä, jossa se todella toimii: ei verkkoa käynnistyksessä, tavallinen kirjautuminen, herääminen unesta ja hallittu pysäytys. Kirjaa sitten työn tunniste, asiakasversio ja profiilin revisio yhdessä, jotta seuraava henkilö perii kohdistettavan palvelun eikä tiedostoa, joka joskus toimi.

Aiheeseen liittyvät artikkelit