Démonok létrehozása a mac os x-hez using launchd - leonid shevtsov

A démon olyan alkalmazás, amely a háttérben fut és működik, és automatikusan újraindul a bukás után, és más szép zsemlétekkel rendelkezik.

Miért kell egy egyszerű fejlesztőnek írni egy démont? Nos, például ne indítsa újra az alkalmazáskiszolgálót, hogy ne lehessenek a terminálon stb.

Nos, például van nginx telepítve. és bele akarok vonni a JRuby-ban írt alkalmazást. A legegyszerűbb módja annak, hogy az alkalmazást a JRuby-on futtassuk, a Rackup segítségével. Nos, vagy akár egy WEBrick is. Nem nehéz csatlakozni a nginxhez. Megtudjuk, hogyan kell biztosítani, hogy ezt a szervert manuálisan ne kelljen elindítani.

Az OS X rendszerben a démonokat az launchd segédprogram vezérli. Után ubuntovskogo Upstart, ő nagyon elégedett, szóval, én írom ezt a cikket.

Launchd különbséget tesz a rendszer és a felhasználói démonok között. Más jogosultságokkal rendelkeznek, például a felhasználó által definiált démonok nem nyithatják ki a socketeket a "rendszer" porton, például a 80-as években. De a felhasználói démonok könnyen telepíthetők és sudo nélkül is működhetnek, ami mellesleg szinte semmit sem jelent a személyes gépén. Ezért megfontolom a felhasználói démonokat.

Az launchd vezérlése érdekében van egy launchctl segédprogram. A Homebrew felhasználók számára ismerős, mert kéri az összes telepített szolgáltatás (pl. DBMS) manuális nyilvántartását. A launchctl információt kap a configs szolgáltatásairól, majd megírjuk.

A launchctl fájlok konfigurálása

A szolgáltatáshoz egy nevet adunk. Hagyományosan hívják vissza a domain név sorrendjében, azaz felhívhatnám a me.shevtsov.leonid.jrubyappot.

/Library/LaunchAgents/me.shevtsov.leonid.jrubyapp.plist a következő tartalommal:

A szolgáltatást a rendszerbe töltjük

Ellenőrizzük, hogy elindult-e a szolgáltatás:

Mit tehetek egy démonnal?

Amit a launchd-ről szerettem - a démon indításakor a rendszer indításakor számos egyéb eseményre is fel lehet függeszteni. Például a könyvtár (WatchPaths) megváltoztatásához vagy a kötet (StartOnMount) csatolásához, a crony-szerű ütemezés (StartCalendarInterval) szerint. És tudomásul veszi, maga a szolgáltatás tudja, milyen ütemtervet kell hívnia - nem kell ezt a konfigurációt írni egy külső fájlhoz (vagyis a crontabhoz).

Úgy tűnt számomra, hogy a launchd sokkal kényelmesebb és rugalmasabb, mint a Upstart.

A konfigurációs fájlok formátuma a launchctl.plist kézikönyvben található meg.

A démon újraindítása

A dokumentáció szerint, miután hívta (nem ajánlott) a stop parancsot, a nem igényelt szolgáltatások újraindulnak.