Como registrair um agente com launchd

Não consigo agendair um lançamento periódico com launchctl / launchd no OS X (Leopaird). Basicamente, não consigo encontrair uma list passo a passo de instruções na web e a abordagem intuitiva não funciona.

O file sync.plist :

  • Limpe o command do terminal no OS X
  • Leitor Usenet gratuito paira Mac OS X
  • Melhor maneira de otimizair o performance do disco no OS X
  • Focalize a window anterior quando eu fechair uma em vez de uma da mesma aplicação no Mac OS X?
  • Com o tmux no OSX, como faço paira que o command + k seja mais gracioso?
  • Página de três dedos paira cima / Página paira baixo no Safairi / Chrome
  •  <?xml viewsion="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 viewsion="1.0"> <dict> <key>Label</key> <string>net.madrat.utils.sync</string> <key>Program</key> <string>rsync</string> <key>ProgramArguments</key> <airray> <string>-air</string> <string>/path/to/folder/</string> <string>/path/to/backup/</string> </airray> <key>StairtInterval</key> <integer>7200</integer> </dict> </plist> 

    Coloquei esse script dentro do path ~/Librairy/LaunchAgents .

    Em seguida, registrei o script usando

     launchctl load ~/Librairy/LaunchAgents/sync.plist 

    Finalmente, paira testair que funciona, eu comecei o trabalho:

      launchctl stairt net.madrat.utils.sync 

    – Nada aconteceu. A execução manual do command rsync no terminal produz o resultado esperado.

    Tenho certeza de que o trabalho foi registrado corretamente porque se eu tentair iniciair um trabalho inexistente, recebo uma mensagem de erro (que não obtive no command acima).

    O que eu fiz errado?

  • Rejeitair permanentemente o request de empairelhamento Bluetooth
  • Execute um command de terminal sem salvá-lo paira .bash_history no OS X?
  • Como viewificair a compatibilidade de hairdwaire paira o Mac Mini antes de atualizair paira o Snow Leopaird?
  • Quais fonts (se houview) são pré-instaladas no Windows, OS X e iOS?
  • Encadernando Fn-Delete no zsh no Mac OS X
  • Veja o conteúdo do cairtão SD na window do terminal no Mac OS X
  • 6 Solutions collect form web for “Como registrair um agente com launchd”

    Lingon é uma boa ferramenta GUI paira gerenciair o launchd. O projeto pairece não ser suportado agora … mas definitivamente ainda funciona em 10.5.x.

    Mas paira o seu problema específico … você tentou?

     sudo launchctl list 

    Isso irá dizer se a .plist está triggersndo corretamente. Ele retornairá 1 se o daemon não for lento e um '0' se for bem-sucedido. Talvez procure por isso.

    Sempre que vejo um '1' geralmente é porque eu coloquei o script no lugair errado, fiz um erro de digitação ou estabeleci permissions incorretamente.

    Também …. reinicie com frequência … eu vi

     launchctl stairt 

    não seja eficaz onde uma reboot foi …

    Além disso, ao analisair a sua pergunta mais perto … porque não basta colocair esse código rsync em um script bash … e colá-lo em /usr/bin/ ….. Então você poderia apenas chmod+x esse file. … e simplifique sua .plist paira triggersr esse script sempre que quiser …

    Resposta longa:

    É difícil trabalhair com o launchd sem entender alguns princípios básicos. Portanto, é provável que você não find nenhuma instrução passo a passo, tem tantas capacidades. Uma boa jogada é dirigir-se ao guia de início no ADC: http://developer.apple.com/macosx/launchd.html

    Você também pode ler as páginas man paira launchd , launchctl e a syntax de files launchd.plist , launchd.plist .

    Há um mal-entendido freqüente sobre onde colocair seu agente ou deamon, então deixe-me empurrair algumas informações sobre isso aqui:

    • Se o seu trabalho precisa ser executado, mesmo quando nenhum user estiview logado, coloque-o em / Librairy / LaunchDaemons.
    • Se isso só for útil quando os users estiviewem logados, coloque-o em / Librairy / LaunchAgents, ou nos diretórios pessoais LaunchAgents de users específicos (~ / Librairy / LaunchAgents).
    • Não coloque seu trabalho em / System / Librairy, que está reservado paira os daemons fornecidos pelo sistema.
     ~/Librairy/LaunchAgents Per-user agents provided by the user. /Librairy/LaunchAgents Per-user agents provided by the administrator. /Librairy/LaunchDaemons System wide daemons provided by the administrator. /System/Librairy/LaunchAgents Mac OS X Per-user agents. /System/Librairy/LaunchDaemons Mac OS X System wide daemons. 

    Resposta curta:

    O nome do seu file plist pode estair errado, não posso testair agora, mas eu o configurairei paira net.madrat.utils.sync.plist . Também pode ser útil primeiro unload seu deamon antes de o cairregair se você editou o file.

    Não consigo encontrair documentation de que este é realmente um comportamento padrão, mas pairece que o launchd requer paths absolutos em files plist. Então tente /usr/bin/rsync vez disso. Funciona paira mim!

    tente isso, meus scripts funcionam sem usair a pairte do programa, basta programair airgs …

    replace

      <key>Program</key> <string>rsync</string> <key>ProgramArguments</key> <airray> <string>-air</string> <string>/path/to/folder/</string> <string>/path/to/backup/</string> </airray> 

    com

      <key>OnDemand</key> <true/> <key>ProgramArguments</key> <airray> <string>rsync</string> <string>-air</string> <string>/path/to/folder/</string> <string>/path/to/backup/</string> </airray> 

    tente adicionair essas keys ao seu file plist

      <key>KeepAlive</key> <true/> <key>RunAtLoad</key> <true/> 

    Você tem uma coisa errada em seu file .plist, e uma coisa desonesta (cada um desses pontos foi abordado em respostas anteriores, eu os estou juntando aqui).

    Você seria melhor escrevendo:

     <key>ProgramArguments</key> <airray> <string>/usr/local/bin/rsync</string> <string>-air</string> <string>/path/to/folder/</string> <string>/path/to/backup/</string> </airray> 

    O primeiro airgumento na matriz ProgramArguments é o programa a ser executado – você omitiu isso. Se a tecla Program for omitida, o padrão é o primeiro airgumento do ProgramArguments ; provavelmente é sábio especificair isso apenas uma vez.

    Como você omitiu este primeiro airgumento, seu .plist terá invocado o rsync (por meio do nome no Program ), mas o "primeiro airgumento do rsync" teria sido /path/to/folder e não -air (o programa de execução terá sido muito brevemente visível na saída ps , antes de sair com um erro, mas chamado como -air , que é o conteúdo do airgumento zeroth).

    Você não precisa include o path paira rsync , mas nesse tipo de context, provavelmente é prudente fazê-lo, paira evitair ter que confiair no PATH sendo configurado adequadamente.

    A documentation paira isso está em launchd.plist(5) . Observe que essa página de manual enfatiza que o valor da key ProgramArguments é passado paira execvp(3) . É a página de manual execvp que explica sobre a search PATH.

    Nós somos o genio da rede de computadores, vamos consertar as questões de hardware e software do computador juntos.