launchd
executa Daemons ( /Library/LaunchDaemons
ou /System/Library/LaunchDaemons
) como root e os executa independentemente de os usuários estarem logados ou não. Os agentes de inicialização ( /Library/LaunchAgents/
ou ~/Library/LaunchAgents/
) são executados quando um usuário está conectado como esse usuário. Você não pode usar o setuid para alterar o usuário que está executando o script nos daemons. O /System
diretório é reservado para tarefas do Mac OS X, portanto, recomendo colocar suas launchd
listas na pasta /Library
ou na ~/Library
pasta, conforme for necessário.
Portanto, o primeiro passo é determinar se você está criando um agente ou um daemon.
O segundo passo é criar seu .plist
arquivo. Você pode usar programas baseados em GUI, como o Lingon, para ajudar com isso ou apenas usar seu editor de texto favorito:
Uma amostra .plist
para executar um script a cada hora ( StartInterval
ou StartIntervalCalendar
são as chaves que queremos - StartInterval
para que um item ocorra a cada x
segundo, StartIntervalCalendar
por um tempo e / ou data específicos. Consulte 126907 no SuperUser para obter um exemplo que fiz com StartCalendarInterval):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>local.IDENTIFIER_HERE.SOMETHING</string>
<key>OnDemand</key>
<true/>
<key>RunAtLoad</key>
<false/>
<key>UserName</key>
<string>USERNAME HERE</string>
<key>Program</key>
<string>/PATH/TO/SCRIPT</string>
<key>ProgramArguments</key>
<array>
<string>Argument_1</string>
<string>Argument_2</string>
</array>
<key>StartInterval</key>
<integer>3600</integer>
</dict>
</plist>
Modifique o .plist
necessário para apontar para seu script e quaisquer argumentos conforme necessário (os argumentos estão em linhas separadas) e salve o arquivo com o mesmo nome que o valor do Label, mas com .plist
no final. (por exemplo, local.my-mac.flickrstats
seria salvo como local.my-mac.flickrstats.plist
). Se você ainda não o fez, mova esse .plist
arquivo para /Library/LaunchDaemons
ao criar um Daemon (executado o tempo todo) ou para ~/Library/LaunchAgents
(apenas você está logado) ou /Library/LaunchAgents
(qualquer usuário está logado).
Para iniciar o trabalho que você deseja executar, launchctl
conforme necessário, para carregar o arquivo. Para itens em /Library
, você deve usar sudo: por exemplo,sudo launchctl load -w /PATH/TO/PLIST
Para referência, consulte também as seguintes perguntas sobre Superusuário : Comando Launchd como root , Carregar um daemon em todo o sistema e Como posso executar um script para executar todos os dias