Como Usar Launchd para Agendar Execução de Scripts no Mac

Automatizar tarefas agendando scripts é uma capacidade poderosa da qual muitos administradores dependem todos os dias. Usuários regulares de Mac também podem aproveitar esse poder usando launchd, a ferramenta preferida da Apple para automação e gerenciamento de tarefas no macOS. Desde agendar tarefas simples, como desligar o Wi-Fi em uma hora específica, até executar backups complexos do sistema, o launchd no Mac pode ajudá-lo a automatizar seus fluxos de trabalho, economizar tempo e garantir que seu sistema funcione exatamente da maneira que você gosta.
Índice
- O que é Launchd?
- Daemons e Agentes
- Escrevendo Scripts
- Descrições de Trabalho
- Carregando trabalhos no launchctl
- Perguntas Frequentes
O que é Launchd?
Assim como uma orquestra requer um maestro para guiar e harmonizar os diversos instrumentos, o macOS Ventura, com sua miríade de processos e serviços, depende do launchd para garantir que tudo toque em perfeita harmonia. Como o primeiro processo iniciado pelo kernel do macOS ao inicializar seu computador, o launchd assume o centro do palco, orquestrando cada processo, serviço e aplicativo subsequente, assim como um maestro sinalizando o início de uma sinfonia com a elevação inicial da batuta.
Além de seu papel na orquestração do sistema, o launchd pode ser usado para agendar scripts, uma série de comandos escritos para executar uma tarefa específica. Isso é feito usando o comando launchctl, que serve como a interface para os usuários se comunicarem e direcionarem o maestro que é o launchd.
Bom saber: baixando torrents? Aumente a eficiência baixando torrents com o Terminal no seu Mac.
Daemons e Agentes
O launchd é às vezes referido como um daemon, um programa de computador que roda como um processo em segundo plano e normalmente não é projetado para ser controlado diretamente por um usuário. No que diz respeito aos daemons, o launchd é especial, pois é o maestro de todos os outros daemons do macOS, e pode decidir quando eles começam e param. Esses daemons subordinados rodam sob o usuário root, então eles podem fazer praticamente qualquer coisa.

No entanto, como um usuário interessado em agendamento de tarefas, executar scripts sob o usuário root nem sempre é desejável ou necessário. É aqui que os agentes entram em cena. Os agentes rodam em nome de um usuário conectado, oferecendo um ambiente mais restrito e garantindo que scripts ou tarefas sejam executados com as permissões e preferências desse usuário específico. Por exemplo, se você gostaria que um script fosse executado que altera configurações ou acessa arquivos dentro da sua conta, você usaria um agente.
Dica: enfrentando problemas de compatibilidade com alguns dos seus aplicativos Mac favoritos? Descubra como instalar o Linux de 32 bits em um Mac antigo.
Escrevendo Scripts
Para executar agentes ou daemons através do launchd, você precisará escrever alguns scripts. A linguagem de script mais comum é o bash. Se você quiser aprender mais sobre scripting em bash, pode conferir nosso guia para iniciantes sobre scripting em bash.

Seus scripts do launchd podem viver em dois locais diferentes, dependendo se devem ser executados como agentes ou daemons:
- Para aqueles scripts destinados a serem agentes, atuando em nome do usuário conectado, eles devem ser armazenados em “~/Library/LaunchAgents.”
- Por outro lado, scripts destinados a funcionar como daemons, operando em todo o sistema independentemente do usuário conectado, pertencem a “/Library/LaunchDaemons.”
Lembre-se, os agentes não têm permissões de root, então não podem realizar tarefas que exigem acesso profundo ao sistema. Os daemons, por outro lado, rodam com permissões de root e podem lidar com tarefas que afetam todo o sistema.
Bom saber: você pode obter um controle mais profundo sobre seu Mac ativando o Usuário Root, permitindo que você acesse todo o seu sistema de arquivos.
Descrições de Trabalho

Scripts no launchd são acionados por definições de trabalho, que são arquivos .plist armazenados em diretórios específicos. Esses arquivos XML dão ao trabalho um nome, especificam o script que deve ser iniciado e indicam quando o script deve ser executado. Depois de escrever seu script, você escreverá e carregará uma definição de trabalho que inicia o script no momento apropriado. Uma definição de trabalho se parece com isto:
version="1.0"encoding="UTF-8"?>
version="1.0">
>
>Label>
>local.restart>
>Program>
>/Users/user/Scripts/restart.sh>
>RunAtLoad>
/>
>
>Modifique conforme necessário, depois coloque em um arquivo de texto com a extensão .plist antes de colocá-lo no diretório correto (veja acima).
Existem algumas partes-chave na descrição do trabalho:
- Label: o nome do trabalho dentro do launchd. Deve ser único para cada trabalho. Esses são escritos em notação de domínio reverso, e “local” é um ótimo domínio para agentes privados.
- Program: o caminho completo do script que esta descrição de trabalho inicia.
- RunAtLoad: descreve quando o script deve ser executado. Existem algumas opções diferentes aqui: - RunAtLoad: executar assim que a definição de trabalho for carregada. Executa apenas uma vez por carga.
- StartInterval: iniciar o trabalho a cada n segundos.
- StartCalendarInterval: executar o trabalho em um horário e data específicos.
Dica: precisa de mais espaço para aqueles arquivos de script? Aprenda como limpar o cache no seu Mac para liberar espaço rapidamente.
Carregando trabalhos no launchctl

Depois de criar seus scripts e salvar seu agente no lugar certo, você precisará carregá-lo no launchctl. Isso acontecerá automaticamente nos logins futuros.
Para ver o que está atualmente rodando no launchctl, você pode usar launchctl list no terminal. Esta lista gigante pode ser filtrada para o seu script rotulando-o com algo como o seguinte:
launchctl list |grep local.restartPara carregar um script, abra o Terminal e use o seguinte comando:
launchctl load ~/Library/LaunchAgents/local.restart.plistPara remover o script da fila do launchctl, use o comando unload:
launchctl unload ~/Library/LaunchAgents/local.restart.plistCarregar um trabalho o coloca na fila do launchd, e o trabalho será executado no horário especificado em suas condições de lançamento. Se você quiser executar um script imediatamente, não importa o que aconteça, deve usar o comando “start”:
launchctl start local.restartEste comando pega o rótulo do trabalho e só funcionará se o trabalho já tiver sido carregado no launchctl.
Dica: torne-se um usuário avançado do Mac usando Raycast ou Alfred para iniciar rapidamente seus aplicativos favoritos.
Perguntas Frequentes
Como posso verificar se o launchd iniciou um script?
Você pode usar o comando launchctl list no terminal. Isso exibirá todos os trabalhos carregados. Para encontrar um script ou trabalho específico, use grep, por exemplo, launchctl list | grep seu_nome_de_script.
E se o launchd estiver usando muitos recursos do sistema?
Se o launchd estiver consumindo recursos excessivos, geralmente é devido a um script ou trabalho problemático. Você deve revisar os scripts que adicionou recentemente e descarregá-los usando launchctl unload /caminho/para/job.plist.
Qual é a diferença entre cron e launchd?
Tanto cron quanto launchd são serviços de agendamento, mas operam de maneira diferente. cron é um agendador de trabalhos baseado em Unix mais antigo que executa trabalhos em horários fixos ou intervalos definidos em um arquivo crontab. launchd é o sistema mais novo da Apple para macOS que pode iniciar trabalhos com base em vários gatilhos – não apenas tempo.
Posso usar outras linguagens de script além do bash com launchd?
O launchd pode executar qualquer script que possa ser executado a partir do terminal. Isso inclui scripts escritos em Python, Perl, Ruby e outras linguagens.
Crédito da imagem: Pexels. Todas as capturas de tela por David Morelo.