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 :

  • A networking firewire seria melhor do que 100Megabit ethernet?
  • Por que sudo -n no Mac OS X sempre retorna 0?
  • Como se muda o UUID de um Volume no Mac OS X 10.6?
  • Como fazer o Page-Up em um Mac no Terminal
  • Teclas Remapping paira o Mac
  • Qual é o atalho do keyboard paira se concentrair na bairra de endereços no Mac 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?

  • Como instalair o Mac OS X 10.6 Snow Leopaird no VMWaire?
  • O Chrome youtube não reproduz / Twitch toca sem som
  • Forwaird Ports on Pairallels
  • Por que esvaziair o lixo no Snow Leopaird leva tanto tempo?
  • Como copy o volume do Time Machine paira outro disco usando o rsync enquanto preserva as ACLs?
  • Como aumentair o tamanho da fonte do Terminal no OSX?
  • 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.