Como usar o Launchd para agendar scripts de execução no Mac

Como usar o Launchd para agendar scripts de execução no Mac

Automatizar tarefas agendando scripts é um recurso poderoso do qual muitos administradores dependem todos os dias. Os usuários comuns de Mac também podem aproveitar esse poder usando o launchd, a ferramenta preferida da Apple para automação e gerenciamento de tarefas no macOS. Desde o agendamento de tarefas simples, como desligar o Wi-Fi em uma hora específica, até a execução de 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 do jeito que você gosta.

O que é lançado?

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, conta com o launchd para garantir que tudo soe em perfeito concerto. Como o primeiro processo iniciado pelo kernel do macOS quando você inicializa o computador, o launchd ocupa o centro do palco, orquestrando todos os processos, serviços e aplicativos subsequentes, como um maestro sinalizando o início de uma sinfonia com o levantamento 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 por meio do launchctlcomando, que serve como interface para os usuários se comunicarem e direcionarem o condutor que é lançado.

Daemons e Agentes

O launchd às vezes é chamado de daemon, um programa de computador que é executado 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 iniciam e param. Esses daemons subservientes são executados sob o usuário root, para que possam fazer praticamente qualquer coisa.

Maxwell Demon Wiki gráfico
Fonte da imagem: Wikipédia

No entanto, como um usuário interessado em agendamento de tarefas, a execução de scripts no usuário raiz nem sempre é desejável ou necessária. É aqui que os agentes entram em ação. Os agentes são executados em nome de um usuário logado, oferecendo um ambiente mais restrito e garantindo que scripts ou tarefas sejam executadas com as permissões e preferências daquele usuário específico. Por exemplo, se você deseja executar um script que altere configurações ou acesse arquivos em sua conta, use um agente.

Escrevendo roteiros

Para executar agentes ou daemons por meio do launchd, você precisará escrever alguns scripts. A linguagem de script mais comum é o bash. Se você quiser aprender mais sobre scripts bash, pode conferir nosso guia para iniciantes sobre scripts bash .

launchd-code-scriptto

Seus scripts launchd podem residir em dois locais diferentes, dependendo se devem ser executados como agentes ou daemons:

  • Para aqueles scripts destinados a serem agentes, agindo em nome do usuário conectado, eles devem ser armazenados em “~/Library/LaunchAgents”.
  • Por outro lado, os scripts destinados a funcionar como daemons, operando em todo o sistema, independentemente do usuário conectado, pertencem a “/Library/LaunchDaemons”.

Lembre-se de que os agentes não têm permissões de root, portanto, não podem executar tarefas que exijam acesso profundo ao sistema. Os daemons, por outro lado, são executados com permissões de root e podem lidar com tarefas que afetam todo o sistema.

Descrições de emprego

launchd-scripts-job-description

Os scripts em launchd são acionados por definições de tarefa, que são. plist armazenados em diretórios específicos. Esses arquivos XML fornecem um nome à tarefa, especificam o script que deve ser ativado e indicam quando o script deve ser executado. Depois de escrever seu script, você escreverá e carregará uma definição de tarefa que ativa o script no momento apropriado. Uma definição de trabalho é mais ou menos assim:

<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN""http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0">
<dict>
<key>Label</key>
<string>local.restart</string>
<key>Program</key>
<string>/Users/user/Scripts/restart.sh</string>
<key>RunAtLoad</key>
<true/>
</dict></plist>

Modifique conforme necessário e, em seguida, coloque-o em um arquivo de texto com a extensão . plist extensão antes de soltá-la no diretório correto (veja acima).

Existem algumas partes-chave para a descrição do trabalho:

  • Rótulo: o nome do trabalho dentro do launchd. Deve ser exclusivo para cada trabalho. Estes são escritos em notação de domínio reverso, e “local” é um ótimo domínio para agentes privados.
  • Programa: 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: executado assim que a definição do trabalho for carregada. Executa apenas uma vez por carga.
    • StartInterval: inicia o trabalho a cada n segundos. Este exemplo executará o trabalho a cada 7.200 segundos ou a cada 2 horas.<key>StartInterval</key> <integer>7200</integer>
    • StartCalendarInterval: executa o trabalho em uma hora e data específicas. O código abaixo executará o trabalho todos os dias às 9h.<key>StartCalendarInterval</key> <dict> <key>Hour</key> <integer>9</integer> <key>Minute</key> <integer>0</integer> </dict>

Carregando jobs no launchctl

launchd-scripts-launchctl-list

Depois de criar seus scripts e salvar seu agente no lugar certo, você precisará carregá-lo em launchctl. Isso acontecerá automaticamente em logins no futuro.

Para ver o que está sendo executado no momento em laucnhctl, você pode usar launchctl listno terminal. Essa lista gigante pode ser usada para o seu script, rotulando-a 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

launchd-scripts-launchctl-load

Para remover o script da fila launchctl, use o unloadcomando:

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

launchd-scripts-launchctl-unload

Carregar um trabalho o coloca na fila launchd e o trabalho será executado no horário especificado em suas condições de inicialização. Se você deseja executar um script imediatamente, não importa o que aconteça, use 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 arquivo launchctl.

perguntas frequentes

Como posso verificar se o launchd iniciou um script?

Você pode usar o launchctl listcomando no terminal. Isso exibirá todos os trabalhos carregados. Para encontrar um script ou trabalho específico, use grep, por exemplo, launchctl list | grep your_script_name.

E se o launchd estiver usando muitos recursos do sistema?

Se o launchd estiver consumindo recursos excessivos, geralmente é devido a um script ou trabalho com comportamento inadequado. Você deve revisar os scripts adicionados recentemente e descarregá-los usando launchctl unload /path/to/job.plist.

Qual é a diferença entre cron e launchd?

Tanto o cron quanto o launchd são serviços de agendamento, mas operam de maneira diferente. cron é um agendador de tarefas mais antigo baseado em Unix que executa tarefas em horários fixos ou intervalos definidos em um arquivo crontab. launchd é o sistema mais recente da Apple para macOS que pode iniciar tarefas com base em vários gatilhos – não apenas no tempo.

Posso usar outras linguagens de script além do bash com o launchd?

launchd pode executar qualquer script que possa ser executado no 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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *