Les démons, Launchd et Mac OS X 10.5

Apparu sous Mac OS X Tiger (10.4), Launchd est le nouveau système de démarrage de programme sous Mac OS X. Launchd est capable de lancer des démons au démarrage, mais aussi à la demande comme le ferait « xinetd » ou bien à des heures précises comme les tâches « cron« .

Au démarrage, Launchd recherche les fichiers « .plist » situés dans différents répertoires comme :

/Library/LaunchDaemons
/Library/LaunchAgents
/System/Library/LaunchDaemons
/System/Library/LaunchAgents

Contrairement au démon, l’agent s’exécute dans un contexte spécifique à la session de l’utilisateur.

Les fichiers « .plist » sont des fichiers xml dont la syntaxe est détaillée à cette adresse

Voyons maintenant comment utiliser Launchd pour gérer le démarrage d’Apache, MySQL et PostgreSQL.

Apache 2 (installé dans /usr/local/apache2)

Créez le fichier « org.apache2.httpd.plist » dans le répertoire : « /Library/LaunchDaemons/ »





        Disabled
        
        Label
        org.apache2.httpd
        ProgramArguments
        
                /usr/local/apache2/bin/httpd
                -D
                FOREGROUND
                -f
                conf/httpd.conf
        
        OnDemand
        


La clé « Disabled » est à « true », Launchd ne lancera donc pas automatiquement Apache au démarrage. Si vous souhaitez qu’il soit lancé au démarrage, passez la clé à « false », sinon utilisez la commande « launchctl » comme ceci :

sudo launchctl load -F /Library/LaunchDaemons/org.apache2.httpd.plist

L’option -F permet de forcer le démarrage même si la clé « Disabled » est à « true ».

Pour arrêter Apache :

// sudo launchctl stop org.apache2.httpd (me semble pas nécessaire, ça redémarre aussitôt)
sudo launchctl unload /Library/LaunchDaemons/org.apache2.httpd.plist

MySQL (installé dans /usr/local/mysql)

Créez le fichier « com.mysql.plist » dans le répertoire : « /Library/LaunchDaemons/ »





        Disabled
        
        Label
        com.mysql
        KeepAlive
        
        ProgramArguments
        
                /usr/local/mysql/bin/mysqld_safe
        
        OnDemand
        
        UserName
        _mysql
        WorkingDirectory
        /usr/local/mysql


Comme pour Apache, je ne souhaite pas voir MySQL lancé au démarrage, la clé « Disabled » est à « true ».

// Pour lancer MySQL
sudo launchctl load -F /Library/LaunchDaemons/com.mysql.plist

// Pour arrêter MySQL
sudo launchctl stop com.mysql (même remarque que pour apache)
sudo launchctl unload /Library/LaunchDaemons/com.mysql.plist

PostgreSQL (installé dans /usr/local/pgsql)

Créez le fichier « org.postgresql.plist » dans le répertoire : « /Library/LaunchDaemons/ »





        Disabled
        
        Label
        org.postgresql
        ProgramArguments
        
                /usr/local/pgsql/bin/postgres
                -D
                /usr/local/pgsql/data
                -c
                logging_collector=YES
                -c
                log_connections=YES
                -c
                log_directory=/usr/local/pgsql/logs
                -c
                log_filename=postgres_log
        
        UserName
        _postgres
        OnDemand
        


Comme pour Apache et MySQL, la clé « Disabled » est à « true ». J’ai noté que le lancement de PostgreSQL provoque une erreur dans les logs (com.apple.launchd[1] (org.postgresql): Bug: launchd_core_logic.c:1324 (23585):22: !value), cependant PostgreSQL est bien lancé.

Afin de vérifier que les démons sont bien lancés (ou pas), vous pouvez utiliser la commande « top », le moniteur d’activité (Applications > Utilitaires > Moniteur d’activité) et surveiller le fichier de log de Syslog (« /var/log/syslog.log »).

Pour plus d’informations sur Launchd, consulter la documentation Apple ici

Il est toujours possible de lancer les démons au moyen de scripts, il faut pour cela regarder du côté des « Statup Item ».

4 réponse à Les démons, Launchd et Mac OS X 10.5

  1. le juin 24, 2010 à 11:54 , Fabien dit:

    Peut-être que cet autre billet peut aussi vous intéresser même s’il mériterait d’être mis à jour ou adapté (fonctionnement de launchctl cf. « man launchctl »)

    http://blog.myprod.net/2008/11/23/installer-postgresql-83-avec-macports/

  2. le juin 24, 2010 à 9:28 , ungars dit:

    La clé doit passer de « true » à « false ».

  3. le juin 24, 2010 à 9:27 , ungars dit:

    La version 8.4.4.1 pour MAC OS X présente une version légèrement différente de com.edb.launchd.postgresql-8.4.plist dans « /Library/LaunchDaemons » :

    Disabled

    Label
    com.edb.launchd.postgresql-8.4
    ProgramArguments

    /Library/PostgreSQL/8.4/bin/postmaster
    -D/Library/PostgreSQL/8.4/data

    RunAtLoad

    UserName
    postgres
    KeepAlive

    SuccessfulExit

    —-
    Je pense que la clé « RunAtLoad » doit passer de «  » à  »
    Mais est-ce bien le cas ?

    Et peut-on modifier manuellement le fichier ?
    Merci d’avance.

    • le juin 24, 2010 à 11:50 , Fabien dit:

      Vous pouvez modifier la clé à main.

      La commande « launchctl » permet aussi de « surcharger » la valeur du fichier « plist »

      Pour lancer le « démon » et passer la clé à « false » (à priori ne modifie plus le fichier, mais surcharge bien la clé).

      => launchctl load -w /Library/LaunchDaemons/com.edb.launchd.postgresql-8.4.plist

      Pour stopper le démon et passer la clé à « true »

      => launchctl unload -w /Library/LaunchDaemons/com.edb.launchd.postgresql-8.4.plist

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *