27 votes

Comment afficher l'état d'un service (par exemple s'il est en cours d'exécution) dans un format similaire à celui de `systemctl` de Linux en utilisant `launchctl` de MacOS ?

Comment afficher l'état d'un service (par exemple, s'il est en cours d'exécution) dans un format similaire à celui de Linux ? systemctl en utilisant MacOS launchctl ?

Je souhaite afficher l'état d'un service sous MacOS en utilisant les éléments suivants launchctl dans un format similaire à celui de Linux systemctl par exemple systemctl status sshd.service

J'essaie de le faire en utilisant la méthode suivante launchctl list des commandes. Il n'est pas évident de savoir si Apache est en cours d'exécution, et j'ai lu que - dans la première colonne de la dernière commande devrait signifier que le service ne fonctionne pas.

Des idées ?

Nicolass-MacBook-Pro:Documents nlykkei$ sudo launchctl list org.apache.httpd
{
        "LimitLoadToSessionType" = "System";
        "Label" = "org.apache.httpd";
        "TimeOut" = 30;
        "OnDemand" = false;
        "LastExitStatus" = 0;
        "Program" = "/usr/sbin/httpd-wrapper";
        "ProgramArguments" = (
                "/usr/sbin/httpd-wrapper";
                "-D";
                "FOREGROUND";
        );
};
Nicolass-MacBook-Pro:Documents nlykkei$ sudo launchctl list | grep apache
-       0       org.apache.httpd

41voto

Prado Points 1415

Je veux voir l'état d'un service sous MacOS en utilisant launchctl.

Salut,

pour visualiser l'état, utilisez imprimer : launchctl print system/org.apache.httpd

La syntaxe est : launchctl print <domain>/<item>

Le domaine peut être :

 `system/<service>`
 `user/<UID>`
 `pid/<PID>`
 `session/<asid>`

Diverses combinaisons et exemples ci-dessous :

Utilisez : launchctl list pour répertorier tous les services. Simple liste des services connus, non détaillée.

Exemple de sortie :

$ launchctl list

PID Status  Label
659 0   com.apple.trustd.agent
-   0   com.apple.MailServiceAgent
-   0   com.apple.mdworker.mail
99270   0   com.apple.mdworker.shared.0E000000-0000-0000-0000-000000000000
-   0   com.apple.mdworker.shared.04000000-0000-0000-0000-000000000000
-   0   com.apple.appkit.xpc.ColorSampler
652 0   com.apple.cfprefsd.xpc.agent
-   0   com.apple.coreimportd
770 0   com.apple.TrustedPeersHelper
-   0   com.apple.SafariHistoryServiceAgent
1236    0   com.apple.progressd
3111    0   com.apple.cloudphotod
758 0   com.apple.Finder
693 0   com.apple.homed
-   78  com.ajsoft.a.mail
  • La première colonne est le PID du processus
  • La deuxième colonne est un code de retour
  • La troisième colonne est l'étiquette du processus

Itens avec - sur la première colonne ne sont PAS en cours d'exécution

Itens avec - y pas 0 sur la deuxième colonne ont été exécutés au moins une fois, mais sont maintenant soit en sommeil soit arrêtés, exemple : - 78 com.ajsoft.a.mail


  • Liste détaillée de tous les services relevant du domaine du système : [tous, y compris ceux qui sont activés et désactivés]

    • sudo launchctl print system/
  • Pour obtenir une liste détaillée des services du système désactivés :

    • sudo launchctl print-disabled system/
  • Pour obtenir TOUTES les informations sur un service système spécifique

    • launchctl print system/com.vix.cron

    sample output:

    $ launchctl print system/com.vix.cron

    com.vix.cron = { active count = 0 copy count = 0 one shot = 0 path = /System/Library/LaunchDaemons/com.vix.cron.plist state = waiting

    program = /usr/sbin/cron
    arguments = {
        /usr/sbin/cron
    }
    
    default environment = {
        PATH => /usr/bin:/bin:/usr/sbin:/sbin
    }
    
    environment = {
        XPC_SERVICE_NAME => com.vix.cron
    }
    
    domain = com.apple.xpc.launchd.domain.system
    domain umask = 22
    minimum runtime = 10
    exit timeout = 5
    runs = 0
    successive crashes = 0
    last exit code = (never exited)
  • Pour imprimer tous les services sous le domaine de l'utilisateur avec UID 501

    • launchctl print user/501
  • Obtenir toutes les informations en utilisant le PID du service ou de l'application (retourné par la commande 'launchctl list`)

    • launchctl print pid/758

sortie de l'échantillon :

com.apple.xpc.launchd.domain.pid.Finder.758 = {
    type = process
    handle = 758
    active count = 91
    on-demand count = 1
    service count = 90
    active service count = 2
    activity ratio = 0.02
    originator = /System/Library/CoreServices/Finder.app
    creator = Finder.758
    creator euid = 503
    uniqueid = 758
    external activation count = 0
    security context = {
        uid = 503
        asid = 100008
    }

    bringup time = 20 ms
    death port = 0x52a63

    in-progress bootstraps = 0
    pended requests = 0
    pending requests = {
    }
    subdomains = {
    }
    pending attachments = {
    }

    environment = {
        PATH => /usr/bin:/bin:/usr/sbin:/sbin
        SSH_AUTH_SOCK => /private/tmp/com.apple.launchd.Me9t1KNNjL/Listeners
        TMPDIR => /var/folders/km/w6p6dvwx6qb16nzxdwy5m5080000gq/T/
    }

    services = {
               0      -     com.apple.amp.devicesui
               0      -     com.apple.security.pboxd
               0      -     com.apple.coremedia.videodecoder
               0      -     com.apple.SafariServices
               0      -     com.apple.MediaLibraryService
               0      -     com.apple.coreservices.SharePointManagementService
               0      -     com.apple.managedclient.pds.Exchange
               0      -     com.apple.SystemExtensionsMDM
               0      -     com.apple.LookupViewService
  • Pour obtenir des informations en utilisant l'identifiant de session
    • launchctl print session/100008

sortie de l'échantillon :

com.apple.xpc.launchd.domain.session.100008 = {
    type = session
    handle = 100008
    active count = 1
    on-demand count = 0
    creator = launchctl.42668
    creator euid = 0
    external activation count = 0
    security context = {
        uid unset
        asid = 100008
    }

    death port = 0x0

Commandes utiles :

  • Cette commande installe/ajoute un service :

    • launchctl load /Library/LaunchDaemons/com.ServiceExample.plist
  • Cette commande activer un service à exécuter automatiquement après l'installation :

    • launchctl enable system/com.ServiceExample
  • Cette commande désactiver un service installé de s'exécuter automatiquement :

    • launchctl disable system/com.ServiceExample
  • Cette commande commencer un service :

    • launchctl start system/com.ServiceExample
  • Cette commande arrêter un service :

    • launchctl stop system/com.ServiceExample
  • Cette commande supprimer un service :

    • launchctl unload /Library/LaunchDaemons/com.ServiceExample.plist
  • Cette commande exécution forcée d'un récent service chargé :

    • launchctl kickstart -p /Library/LaunchDaemons/com.ServiceExample.plist
  • Cette commande Arrêts et désactivation a en cours d'exécution service

    • launchctl bootout system/com.ServiceExample

Vous pouvez remplacer le "domaine système" ci-dessus par un processus de "domaine utilisateur".

  1. Installer/additionner signifie : inclure le service dans la liste des services connus par le système. (pour que vous puissiez le démarrer et l'arrêter)

  2. supprimer signifie : supprimer le service de la liste des services connus du système. (il ne sera plus listé si vous exécutez la commande launchctl list )

Aucun fichier n'est supprimé en supprimant le service, vous supprimez simplement sa référence .plist de la liste des services. Une fois supprimé, vous ne pouvez pas le démarrer/arrêter. Et il n'apparaîtra pas sur la page launchctl list . À moins que vous ne l'ajoutiez à nouveau avec l'option charge paramètre.

5voto

Jose Chavez Points 645

Vous pouvez le faire en exécutant la commande :

launchctl list

Dans la première colonne de la sortie, vous trouverez le PID. S'il s'agit d'un nombre, le service est en cours d'exécution - s'il est listé comme "-", il n'est pas en cours d'exécution.

De même, vous pouvez vérifier un seul démon comme ceci :

launchctl list <daemon>

il y aura une sortie avec diverses informations - une des lignes ressemblant à ceci :

"PID" = 310;

cela signifie que le programme est en cours d'exécution, et que l'ID du processus est 310. S'il n'y a pas de ligne "PID", alors le daemon n'est pas en cours d'exécution.

Il n'y a pas d'option pour obtenir une sortie identique à celle que vous connaissez de systemctl pour systemd. Je ne sais pas pourquoi vous voudriez une sortie identique, ou pourquoi vous pensez qu'il y en aurait une. Il n'était pas possible pour Apple de fournir une sortie compatible quand ils ont publié launchctl, car launchd précède systemd de 5 ans. Donc en termes de "compatibilité", ce devrait être l'inverse - bien que je ne vois pas l'intérêt d'avoir des sorties compatibles.

Si vous voulez vraiment une sortie similaire, il est relativement simple de créer un petit scripts qui prend la sortie de launchctl et la sort dans un format similaire à la sortie de systemctl. Cependant, il ne peut pas être précisément le même, car les deux utilitaires ont des options différentes et des informations différentes à leur disposition.

Par exemple, la sortie de systemctl contient généralement des éléments tels que la sortie du journal (intégré dans systemd, non intégré dans launchd), des informations sur le CGroup (fonctionnalité réservée à Linux) et des pointeurs vers la documentation.

De même, la sortie de launchctl contient des choses comme MachServices qui n'est disponible que pour MacOS.

Veuillez noter qu'il est possible de configurer launchd pour démarrer un démon "à la demande". Cela signifie que vous spécifiez par exemple que votre logiciel de serveur web fonctionne sur le port TCP 80 - et alors launchd surveille ce port et démarre votre démon seulement quand il y a des requêtes entrantes. Si vous utilisez launchctl, vous ne trouverez pas de PID pour le démon initialement, mais si vous commencez à lui envoyer des requêtes, il sera démarré et aura un PID. Lorsque les demandes s'arrêtent, le daemon sera à nouveau arrêté après un court instant.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X