O Launchd WatchPaths não responde a alterações, mas apenas a arquivos e discos montados

0

Estou executando o Snowleopard 10.6.8 em um servidor Macmini e quero que este servidor execute um script sempre que um arquivo ou pasta for inserido / editado ou excluído de uma pasta especificada. Como gostaria que esse comportamento funcionasse na rede quando o sistema estava ligado (mas não conectado), criei um script .plist que é definido como um LaunchDeamon. O .plist tem os mesmos direitos que todos os meus outros .plists: "Sistema: ler e escrever. Rodar e todos: somente leitura"

Como um testcase eu configurei o seguinte script com uma pequena ajuda do lingon 2.1. Este script deve executar o growltime.scpt, sempre que a área de trabalho ( <WatchPaths> ) detectar uma alteração ou quando algo estiver montado ( <StartOnMount> ).

<?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>com.watchfolder.growltime</string>
    <key>ProgramArguments</key>
    <array>
    <string>osascript /Users/admin/growltime.scpt</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StartOnMount</key>
    <true/>
    <key>WatchPaths</key>
    <array>
    <string>/Users/admin/Library/Desktop/</string>
    </array>
</dict>
</plist>

Agora, o estranho é que o growltime.scpt será executado APENAS quando eu montar um disco ou um arquivo de instalação estiver montado ( <StartOnMount> ), mas NÃO quando um arquivo ou pasta tiver sido inserido / editado ou apagado na área de trabalho ( <WatchPaths> ).

O que estou fazendo de errado aqui?

    
por Jroen 14.05.2012 / 17:45

1 resposta

2

Antes de mais nada, ele não deve funcionar, a menos que cada palavra em ProgramArguments seja uma string separada. Em vez disso

<key>ProgramArguments</key>
<array>
<string>osascript /Users/admin/growltime.scpt</string>
</array>

deve ser

<key>ProgramArguments</key>
<array>
        <string>osascript</string>
        <string>/Users/admin/growltime.scpt</string>
</array>

Você talvez tenha uma versão mais antiga do agente carregada quando estava testando? As listas de propriedades podem ser recarregadas com launchctl unload ~/Library/LaunchAgents/$id.plist && launchctl load ~/Library/LaunchAgents/$id.plist .

Você também teve um erro no caminho da área de trabalho:

<key>WatchPaths</key>
<array>
<string>/Users/admin/Library/Desktop/</string>
</array>
    
por 14.05.2012 / 18:02