Salve uma lista de propriedades como esta como ~/Library/LaunchAgents/test.plist
:
<?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>test</string>
<key>ProgramArguments</key>
<array>
<string>say</string>
<string>yy</string>
</array>
<key>WatchPaths</key>
<array>
<string>~/Desktop/</string>
</array>
</dict>
</plist>
O agente pode ser carregado com launchctl load ~/Library/LaunchAgents/test.plist
ou efetuando logout e logon novamente. A aplicação de alterações requer descarregar e carregar o plist.
A expansão til ( ~/
) funciona nos WatchPaths por padrão. EnableGlobbing adiciona expansão curinga e til para ProgramArguments, mas não afeta o Program ou o WatchPaths.
Se um arquivo monitorado for modificado dentro de dez segundos a partir da última chamada, uma mensagem como esta será adicionada ao system.log:
com.apple.launchd.peruser.501[146]: (test) Throttling respawn: Will start in 7 seconds
Uma maneira de se livrar das mensagens é adicionar algo como sleep 10
ao final dos scripts. Definir ThrottleInterval para 10 não ajuda.
Alterações nas subpastas das pastas monitoradas não são detectadas.
Veja man launchd
e man launchd.plist
para mais informações.