Hoje vou contar aqui minha experiência com o
launchd
, o gerenciador de serviços do Mac OS X. Não é uma experiência muito vasta, mas acho que já é válida pra quem está procurando informações.Durante este post, vamos ver os seguintes tópicos:
- O que é e como funciona o
launchd
- Configuração do serviço
- Opções gerais do arquivo
launchd.plist
- Aplicação real: Configurando o daemon de atualização do no-ip[3]
Termos Utilizados
- agent - Programa que roda em background, e é inicializado quando o usuário faz login;
- daemon - Programa que roda em background, e é inicializado juntamente com o Mac OS X.
O que é e como funciona o launchd
Configurar um serviço para rodar em background na inicialização de um sistema operacional nem sempre é uma tarefa simples (tome-se como exemplo a dor de configurar serviços no windows, ou mesmo fazer gerenciamento dos scripts rc*.d no linux). No Mac OS X, o sistema gerenciador de processos é o launchd
. Ele gerencia tanto processos que são lançados quando o usuário inicializa a sessão (agents), quando os que são inicializados durante o boot (daemons), e você pode configurar ambos os tipos de aplicação para serem iniciados a seu gosto.Para fazer o lançamento das aplicações durante o login, o
launchd
busca informações em arquivos .plist
[1] nas seguintes pastas no sistema operacional:- ~/Library/LaunchAgents - para programas a serem inicializados no login de um usuário específico (provido pelo usuário);
- /Library/LaunchAgents - para programas que serão inicializados no login de todos os usuários (provido pelo administrador do sistema);
- /Library/LaunchDaemons - para programas a serem lançados durante a inicialização do sistema (provido pelo administrador do sistema);
- /System/Library/LaunchAgents - para serviços internos do Mac OS X a serem lançados no login dos usuários;
- /System/Library/LaunchDaemons - para serviços internos do Mac OS X a serem lançados durante o boot.
Configuração do serviço
Os passos para a configuração do serviço são poucos e simples. Primeiro, criamos um arquivo.plist
com as configurações desejadas do serviço. Depois, colocamos o arquivo em uma das pastas acima citadas, conforme o fim desejado. E pronto! na próxima inicialização, o Leopard já vai inicializar seu serviço normalmente.Um arquivo
.plist
nada mais é do que um tipo de arquivo XML, com algumas tags para definição de tipos de dados para a representação de dicionários, listas, strings, etc. É vastamente utilizado em softwares escritos em Objective-C, para serialização de dados.Para editar um arquivo
.plist
podemos utilizar qualquer editor de texto. Para quem tem o Xcode instalado, podemos usar o Property List Editor:Opções gerais do arquivo launchd.plist
A lista completa de opções para um arquivo
.plist
pode ser obtida em[5]. Seguem aqui os parâmetros mais geralmente usados:- Label (
String
) - Identifica únicamente o trabalho a ser executado pelolaunchd
; - Disabled (
Boolean
,false
por padrão) - Coloque esta opção para desabilitar temporariamente a inicialização; - UserName (
String
) - Especifica o usuário que executará o programa. Somente aplicável se olaunchd
é executado como root. - GroupName (
String
) - Especifica o grupo que executará o programa. Somente aplicável se olaunchd
é executado como root. - Program (
String
) - Caminho completo para a execução do programa; - ProgramArguments (
Lista
deStrings
) - Lista de parâmetros para a execução do programa; - RunAtLoad (
Boolean
,false
por padrão) - Define se o serviço vai ou não ser carregado na inicialização; - RootDirectory (
String
) - Caminho para execução "engaiolada" (chrooted
); - WorkinDirectory (
String
) - Caminho para execução da aplicação (chdir
).
Aplicação real: Configurando o daemon de atualização do no-ip
Primeiro, precisamos baixar o cliente do no-ip em [4], e instalá-lo normalmente. Feito isto, vamos criar um arquivo chamado com.noip.noip2.plist, e editar as seguintes propriedades:Key | Type | Value |
---|---|---|
UserName | String | root |
Label | String | com.noip.noip2 |
GroupName | String | wheel |
RunAtLoad | Boolean | true |
OnDemand | Boolean | false |
Program | String | /usr/local/bin/noip2 |
Para quem quiser editar o arquivo em um editor de texto normal, o código deve ficar desta forma:
<?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>UserName</key>
<string>root</string>
<key>Label</key>
<string>com.noip.noip2</string>
<key>GroupName</key>
<string>wheel</string>
<key>RunAtLoad</key>
<true/>
<key>OnDemand</key>
<false/>
<key>Program</key>
<string>/usr/local/bin/noip2</string>
</dict>
</plist>
E pronto! ao reiniciar o computador, você pode checar o daemon rodando através do comando:
[rodolfocarvalho@imac-rox:~]$ ps aux |grep noip2
root 3717 95.8 0,0 132152 480 ?? Rs Qua10 1557:56.10 /usr/local/bin/noip2
É isto! espero que minha ajuda tenha sido útil! Qualquer sugestão ou dúvida, é só postar um comentário ;)
Referências:
[1] http://developer.apple.com/documentation/Darwin/Reference/ManPages/man5/plist.5.html
[2] http://developer.apple.com/documentation/Darwin/Reference/ManPages/man8/launchd.8.html
[3] http://www.no-ip.com
[4] http://www.no-ip.com/client/mac/noip3.1.2a.dmg
[5] http://developer.apple.com/documentation/Darwin/Reference/ManPages/man5/launchd.plist.5.html#//apple_ref/doc/man/5/launchd.plist
Nenhum comentário:
Postar um comentário