Como usar LaunchAgents e LaunchDaemons no macOS: um guia completo

Última atualização: 22/09/2025
autor: Isaac
  • Os LaunchAgents dependem dos LaunchDaemons do usuário e do sistema; ambos são gerenciados pelos arquivos launchd e .plist em caminhos específicos.
  • O macOS 13+ apresenta SMAppService, notificações e perfis XML para aprovação transparente de itens em segundo plano.
  • Diagnosticar com sfltool, launchctl e toras de backgroundtaskmanagement; verifique os itens em Configurações do Sistema.
  • Aplique as permissões corretas, use KeepAlive com SuccessfulExit/NetworkState e evite tocar em /System/Library para obter estabilidade máxima.

Guia para LaunchAgents e LaunchDaemons no macOS

No macOS, grande parte da mágica acontece nos bastidores graças aos serviços que iniciam sem que você perceba, e o emparelhamento Agentes de Lançamento/Daemons de Lançamento é o coração dessa automação. Se você já se perguntou como fazer um escrita Bota sozinho, mantendo um aplicativo crítico ativo ou auditando quais aplicativos são carregados, aqui está o guia prático que você estava procurando.

Desde MacOS 13, A Apple mudou as regras do jogo com uma nova estrutura nos pacotes de Aplicativos e o quadro de Serviço SMApp, que proporciona maior transparência ao usuário e gerenciamento consistente dos elementos de login, agentes de lançamento y daemons de lançamento. Além disso, há melhorias para administradores com perfis de configuração e ferramentas de diagnóstico que é uma boa ideia dominar.

Programas que são executados na inicialização
Artigo relacionado:
Programas que são executados na inicialização. Quais excluir e como fazer

O que são launchd, LaunchAgents e LaunchDaemons

O processo launchd Ele inicia logo após o kernel (é um dos primeiros a iniciar, geralmente com PID 1) e é o que inicia, controla e monitora outros serviços. Normalmente, consome poucos recursos, mas se um dia você perceber que ele está com carga alta no Monitor de Atividade, uma reinicialização geralmente o faz voltar ao normal.

Os LaunchDaemons Eles são executados na inicialização do sistema e o fazem no contexto de raiz; eles não dependem de login e não podem interagir com a interface gráfica. São perfeitos para tarefas do sistema, processos persistentes e serviços que precisam estar disponíveis mesmo quando o usuário não está logado.

Os Agentes de Lançamento Eles são carregados quando um usuário específico efetua login e pode interagir com a interface (barra de menu, notificações, janelas, etc.). São ideais para utilitários do usuário, assistentes de aplicativos e processos que exigem login.

Em ambos os casos, a configuração reside em arquivos .plist com chaves e valores que indicam o que executar, quando e como. Esses arquivos .plist são gerenciados pelo launchd e residem em locais específicos no sistema, portanto, saber para onde eles vão, com quais permissões e como carregá-los é crucial.

Estrutura e localização dos arquivos .plist

O macOS organiza os arquivos .plist da seguinte forma: no nível do sistema em /Sistema/Biblioteca/LaunchAgents y /Sistema/Biblioteca/LaunchDaemons, globalmente em / Library / LaunchAgents y / Library / LaunchDaemons, e no nível do usuário em ~ / Library / LaunchAgents. A regra saudável é instalar o seu próprio em /Library ou em ~/Library, e Não toque a árvore /System/Library.

Os arquivos .plist são arquivos XML com chaves como O rótulo (identificador de serviço), Programa o Argumentos do Programa (o que executar), Executar sob carga (iniciar assim que carregar) ou Mantenha vivo (política de repetição/ativação). Você pode visualizá-los com um editor de texto, mas edite-os com cuidado e sempre saiba o que cada tecla faz.

Para que o launchd aceite um .plist, a propriedade e as permissões devem ser respeitadas. Como administrador: sudo chown root:wheel /Library/LaunchAgents/mi.servicio.plist y sudo chmod 644 /Library/LaunchAgents/mi.servicio.plist. Essas configurações garantem que raiz pode escrever, o grupo roda e outros podem lê-lo, e o launchd confia no arquivo.

Uma vez instalado, ele carrega com sudo launchctl load -w /Library/LaunchAgents/mi.servicio.plist ou sua contraparte em /Library/LaunchDaemonsPara removê-lo, você pode usar launchctl remove com.ejemplo.mi-servicio (onde o rótulo corresponde ao valor de O rótulo).

  Abrindo sessões do Hotmail - Como fechar o Outlook/Hotmail?

Novos recursos desde o macOS 13: SMAppService e transparência do usuário

A Apple introduziu uma estrutura de pacote de aplicativos que mantém os executáveis ​​auxiliares dentro do próprio aplicativo e os gerencia com Serviço SMAppIsso permite a gravação e o monitoramento elementos de login, agentes de inicialização e daemons de inicialização como executáveis ​​auxiliares, sem espalhá-los pelo sistema e com maior visibilidade para o usuário.

Quando esses itens são implantados via MDM ou instaladores, o macOS 13+ exibe um notificação de instalação de item gerenciado para denunciar e permitir revisão nas Configurações do Sistema. A primeira correspondência com uma regra gera uma notificação; correspondências subsequentes no mesmo dia não emitem mais notificações repetidas.

Se o usuário adia Após a notificação, o macOS silencia notificações futuras desse tipo pelo período escolhido (1 dia ou 1 semana). Enquanto a notificação estiver visível, nenhuma outra instalação será exibida; se você ignorá-la, as instalações subsequentes retomarão as notificações. Essa política reduz o ruído e, ao mesmo tempo, proporciona controle.

Visibilidade e diagnóstico: tudo o que você precisa verificar

Para ver o que está sendo gravado com o novo quadro, abra Configurações do sistema > Geral > Itens de inicializaçãoLá você verá os elementos de login e de plano de fundo; o botão de informações mostra o executável que está sendo iniciado e os detalhes associados.

On-line comandos, você tem vários usos. Com launchctl list Você obtém todos os serviços em execução. Para a estrutura de tarefas em segundo plano, use sfltool dumpbtm e verificar o status atual (inclui o UUID da carga útil de servicemanagement). Se você precisar limpar o estado entre os testes, execute sfltool resetbtm e, para higiene, reiniciar el Mac antes de tentar novamente.

Para registros em tempo real, filtre por console pelo subsistema e categoria apropriados, ou lançamento em terminal: log stream --debug --info --predicate "subsystem == 'com.apple.backgroundtaskmanagement' AND category == 'mcx'"Com isso, você verá rastros úteis de adição, exclusão e gerenciamento de itens.

Se você tiver acesso ao AppleSeed for IT, a ferramenta Utilitário de avaliação do Mac 4.3.0+ gera relatórios detalhados sobre o que ele gera sfltool dumpbtm, e permite exportar resultados delimitados para análise posterior ou correlação com o inventário.

Perfis XML para gerenciamento de tarefas em segundo plano

As organizações podem aprovar automaticamente itens de segundo plano usando um Perfil de configuração XMLConteúdo é um conjunto de regras (dicionários); quando um elemento corresponde, ele é aprovado. Existem vários tipos de correspondência que vale a pena dominar.

  • Identificador de pacote (ID do pacote) com correspondência exata para um aplicativo específico.
  • Prefixo do Identificador do Pacote para autorizar famílias de aplicativos sob um prefixo.
  • Identificador de equipe do desenvolvedor (assinatura de código) com correspondência exata.
  • O rótulo do serviço (chave Label do launchd .plist) com correspondência exata.
  • Prefixo do rótulo para aprovar tags que começam com um determinado padrão.

Com esta abordagem, os administradores garantem que os elementos legítimos sejam ativados sem atrito, tudo com rastreabilidade e cumprir a política corporativa. Se você gerencia frotas, isso economiza suporte e evita tempo de inatividade desnecessário.

Segurança, malware e poderes do sistema

Muitos instaladores adicionam arquivos .plist que são esquecidos quando o aplicativo original é desinstalado. Esses resíduos podem reiniciar processos que você pensava terem sido eliminados. Além disso, malwares abusa do LaunchAgents para persistir, coletar dados e se comunicar com servidores remotos.

  O Photo Stream não está conectado ao Mac: como consertar?

A Apple mantém um arquivo de atribuição com binários auxiliares comuns que ajudam a identificar quem é quem: /System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/Resources/attributions.plistConsultá-lo pode lhe dar pistas sobre atributo executáveis ​​para seus aplicativos pais em análise forense ou limpeza.

Como uma camada de vigilância "artesanal", você pode ativar Ações de pasta em rotas sensíveis: /Library/LaunchAgents, /Library/LaunchDaemons, /System/Library/LaunchAgents, /System/Library/LaunchDaemons y ~/Library/LaunchAgentsDessa forma, você será notificado quando um novo arquivo .plist aparecer, permitindo que você o inspecione em tempo real.

Criando seus próprios LaunchAgents e LaunchDaemons

A ideia básica é simples: escrever um .plist com o O rótulo (por exemplo., com.ejemplo.miscript), define Programa o Argumentos do Programa com o caminho exato do executável/script, defina chaves como Executar sob carga e, se aplicável, Mantenha vivo, e coloque-o na pasta apropriada.

Se a tarefa deve ser executada antes do login e sem interface do usuário, coloque-a em /Library/LaunchDaemons. Se você depende de um usuário e/ou interage com a interface, use /Library/LaunchAgents o ~/Library/LaunchAgents (apenas para esse usuário). Lembre-se de aplicar propriedade e licenças corrija antes de carregar.

Para ativar instantaneamente: sudo launchctl load -w /Library/LaunchDaemons/com.ejemplo.miscript.plist. Para parar e baixar: sudo launchctl unload -w /Library/LaunchDaemons/com.ejemplo.miscript.plist o launchctl remove com.ejemplo.miscript. Certifique-se de que caminhos para binários existem e são executáveis.

Conselho prático: sempre teste primeiro ~ / Library / LaunchAgents com seu usuário, verifique os logs e o comportamento e só então promova para /Library. Evite modificar /System/Library/…; além de ser uma prática ruim, o sistema protegido (SIP) impede isso por razões de segurança.

Políticas KeepAlive e casos de uso da vida real

Se você precisa de um processo para estar sempre no topo, a chave Mantenha vivo permite granularidade. Você pode colocar <true/> para tentativas incondicionais ou use um dicionário com condições para controle fino.

Um padrão muito útil combina Mantenha vivo com Saída bem-sucedida. Quando você define SuccessfulExit = false, o launchd tentará novamente se o processo sair com um código diferente de 0 (travamento, erro), mas se o usuário fechá-lo "limpamente" (saída 0), não irá reiniciá-lo. Dessa forma, você evita aborrecimentos ao atualizar um aplicativo ou desligar o Mac.

Outra abordagem comum é Estado da rede: se você definir para true No KeepAlive, a reinicialização respeitará a "disponibilidade da rede" (o dispositivo tem um endereço IP). Observação: a presença de rede nem sempre significa acesso à internet; o launchd verifica apenas a conectividade básica, não se o seu provedor de internet está respondendo.

Se você planeja manter um aplicativo de interface ativo (por exemplo, um utilitário de barra de menu), crie um Agente de Lançamento com seu pacote binário real: por exemplo, /Applications/MiApp.app/Contents/MacOS/MiApp. Evite caminhos para aliases ou para o aplicativo “icônico” e aponte para o executável dentro do pacote.

Em ambientes autônomos (quiosques, telas de informações, servidores com sessão persistente), essas políticas podem fazer a diferença para suas ferramentas não caia e se o fizerem, eles se levantam sozinhos, sem intervenção humana.

Alternativas e práticas antigas que devem ser evitadas

Maçã deixada de lado cron y Ganchos de login como formas recomendadas para iniciar tarefas; o caminho oficial é launchd. Também houve Itens de inicialização em versões mais antigas (pastas no Sistema e Biblioteca Global), mas não deve ser usado para novas implementações hoje.

Editar árvores de sistema manualmente (/System/Library/LaunchDaemons) pode acabar em um Mac que não arranca. Não corra riscos: se precisar inicializar muito cedo, use /Library/LaunchDaemons com a configuração e permissões corretas e deixe os componentes do sistema em paz.

Monitoramento de desempenho e solução de problemas

Se você notar que seu Mac está lento, abra Monitor de Atividade e classificar por CPU. Normalmente launchd não aparecer no lead; se estiver em 30-40% continuamente, reinicie o sistema e verifique novamente. Se persistir, liste os serviços com launchctl list e eliminar suspeitos.

  Windows 10: como usar um controlador de PlayStation 3

Para auditar quais itens são registrados com a nova estrutura, sfltool dumpbtm é ouro: capture sua saída e salve-o no seu relatório de suporte. Entre os testes, sfltool resetbtm Isso deixa você com uma tela limpa; lembre-se de reiniciar para evitar estados intermediários.

Os logs são seus amigos: com log stream --debug --info --predicate "subsystem == 'com.apple.backgroundtaskmanagement' AND category == 'mcx'" Você obterá detalhes precisos de altos, baixos e mudanças. Combine com console filtrando pelos mesmos campos se preferir uma interface gráfica.

Gerenciamento em escala com MDM e melhores práticas

Em implantações gerenciadas, crie um Perfil XML que descreve as regras de aprovação (por ID do pacote, prefixo, ID da equipe, tag ou prefixo de rótulo). Dessa forma, quando um aplicativo registra seu auxiliar, o macOS o aprova automaticamente e o usuário verá uma notificação controlada.

Teste seus fluxos padrão (instalar, atualizar, desinstalar) e valide o resultado com Gerenciamento declarativo de dispositivos no macOS 14+ (relatório de status) e com as ferramentas mencionadas. Colete feedback de usuários e fornecedores para adaptar os aplicativos à nova estrutura.

Documente a política interna: o que é autorizado, sob quais critérios, quem a revisa, como é auditada e o que fazer se um elemento começar a consumir recursos. Com essa higiene, você evita surpresas e melhora a segurança e a estabilidade da frota.

Dicas de limpeza e monitoramento contínuo

Se após desinstalar algo o item reaparecer na inicialização, procure seu .plist pelo nome em /Library/LaunchAgents, /Library/LaunchDaemons y ~/Library/LaunchAgents. Exclua o arquivo e baixe o serviço com launchctl remove usando o dele O rótulo.

Para aumentar sua visibilidade, habilite estes Ações de pasta Comentado: Sempre que um novo arquivo .plist aparecer em caminhos sensíveis, você receberá uma notificação e poderá intervir imediatamente. É uma medida simples que lhe poupa dores de cabeça.

Lembre-se de que os agentes são por usuário e os daemons são para todo o sistema. Em máquinas compartilhadas, você pode preferir agentes em ~/Library/LaunchAgents para não afeta outros perfis, a menos que seja uma tarefa intercorporativa.

Se você automatizar um aplicativo para ficar sempre aberto, lembre-se de que ele pode bloquear desligar ou reiniciar quando reiniciado quando o sistema tenta desligar. Antes de atualizar ou reiniciar, desative o serviço com launchctl remove ou baixe o .plist e reative-o depois.

Por fim, não se esqueça de verificar periodicamente Configurações do sistema > Geral > Itens de inicialização e a seção de itens de fundo. Esta é a maneira mais rápida de detectar "clandestinos" que se infiltram com instaladores descuidados.

Dominador Agentes de lançamento e Daemons de lançamento Ele lhe dá controle: você sabe o que começa, quando e por quê; pode aprovar ações legítimas com perfis, diagnosticar com sfltool e logs e fortalecer a segurança graças à transparência fornecida pelo SMAppService no macOS 13+. Com algumas regras claras (caminhos corretos, permissões, rótulos consistentes e uso adequado do KeepAlive), você terá serviços estáveis, usuários informados e um sistema mais previsível, sem precisar lidar com métodos desatualizados.