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

Script do 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.

Gráfico do Demônio de Maxwell Wiki

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.

launchd-código-scriptto

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

launchd-scripts-descrição-do-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

launchd-scripts-launchctl-list

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.restart

Para carregar um script, abra o Terminal e use o seguinte comando:

launchctl load ~/Library/LaunchAgents/local.restart.plist

Para remover o script da fila do launchctl, use o comando unload:

launchctl unload ~/Library/LaunchAgents/local.restart.plist

Carregar 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.restart

Este 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.