Eu tenho um daemon launchd ~/Library/LaunchAgents
que funcionou bem no Mavericks. Mas não começará na versão beta pública de Yosemite. O daemon plist é assim (meu nome de usuário está darksair
no UID 501)
<?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>org.darksair.retrmail</string>
<key>ProgramArguments</key>
<array>
<string>/Users/darksair/bin/retrmail.py</string>
</array>
<key>KeepAlive</key>
<false/>
<key>StartInterval</key>
<integer>300</integer>
<key>LaunchOnlyOnce</key>
<false/>
<key>UserName</key>
<string>darksair</string>
<key>ProcessType</key>
<string>Standard</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/Users/darksair/Python/bin:/Users/darksair/Python3/bin:/Users/darksair/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<key>StandardOutPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
<key>StandardErrorPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
</dict>
</plist>
Basicamente, ele deve ser executado a ~/bin/retrmail.py
cada 5 minutos.
Percebo que no Yosemite, o launchd é atualizado para 2.0 e o launchctl tem novos comandos. eu tentei
sudo launchctl kickstart user/501/org.darksair.retrmail
e disse
Could not find service "org.darksair.retrmail" in domain for uid: 501
Eu também tentei a velha escola
sudo launchctl load ~/Library/LaunchAgents/retrmail.plist
e disse
/Users/darksair/Library/LaunchAgents/retrmail.plist: Path had bad ownership/permissions
O arquivo pertence a mim e ao grupo de funcionários. Tentei as permissões 644 e 600 com o mesmo erro.
Alguém sabe como iniciar adequadamente um daemon launchd em Yosemite?
UPDATE: Parece que meu arquivo do agente de inicialização deve pertencer a root:wheel
. Depois que chown, tentei
sudo launchctl load ~/Library/LaunchAgents/retrmail.plist
e não emitiu nenhum erro. E acho que meu deamon está funcionando corretamente. Deixarei essa pergunta em aberto porque lembro que o documento launchd indica claramente que o arquivo do agente de inicialização pode pertencer ao usuário que está executando o daemon.
UPDATE2: Não, não estava funcionando corretamente. Foi executado apenas uma vez, mas não novamente, como se estivesse descarregado.
UPDATE3: atualizei para o beta 3 público de Yosemite e mudei meu agente para este
<?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>org.darksair.retrmail</string>
<key>ProgramArguments</key>
<array>
<string>/Users/darksair/bin/retrmail.py</string>
</array>
<key>StartInterval</key>
<integer>300</integer>
<key>UserName</key>
<string>darksair</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/Users/darksair/Python/bin:/Users/darksair/Python3/bin:/Users/darksair/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>
<key>StandardOutPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
<key>StandardErrorPath</key>
<string>/Users/darksair/logs/retrmail.log</string>
</dict>
</plist>
Eu recarreguei esse agente e acho que agora está funcionando corretamente. Ainda estou deixando esta questão em aberto, porque não sei o que há de errado com meu argumento anterior.
Concluindo, o que descobri é que tenho que mudar o proprietário do plist para root:wheel
para carregá-lo.