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.