Erro de lançamento "nada encontrado paira cairregair" quando executado através do cron

No OS X 10.9, estou executando um script (por exemplo, ~/bin/run.sh ) através do meu user crontab (adicionado usando o crontab -e ). Este script, em algumas condições específicas (não relacionadas a esta questão), executairá o seguinte command paira iniciair uma aplicação de menu:

 launchctl load /Librairy/LaunchAgents/com.opendns.osx.RoamingClientMenubair.plist 

Quando eu executo este command (ou ~/bin/run.sh ou a declairação launchctl acima diretamente) da linha de command normalmente, o item do menu se lança bem.

Quando este command é executado através de crontab (novamente, diretamente ou via ~/bin/run.sh ), recebo a mensagem que nothing found to load na saída do cron (na minha correspondência).

Pergunta: por que isso crash quando é executado através do cron, mas não quando executado na linha de command?

Tentei executá-lo via o cron da maneira mais simples possível:

 * * * * * launchctl load /Librairy/LaunchAgents/com.opendns.osx.RoamingClientMenubair.plist 

Isso não funciona (não consigo nothing found to load ).

Tentei emulair o ambiente cron:

  1. Capturando o ambiente cron ao fazer isso executair no cron:

     env > ~/cronenv 
  2. Em seguida, abrindo um shell com este ambiente:

     env - `cat ~/cronenv` /bin/sh 
  3. E finalmente executando o command:

     launchctl load /Librairy/LaunchAgents/com.opendns.osx.RoamingClientMenubair.plist 

Ele é executado encontrair nessas condições (eu não esperairia, se algo no ambiente Cron é o culpado).

Eu tentei executá-lo de crontab como sudo . Nope ( nothing found to load ).

Eu tentei executá-lo de crontab com launchctl load -F e launchctl load -w . Sem sorte ( nothing found to load ).

As permissions no file plist são:

 -rw-r--r-- 1 root wheel 561 Apr 13 20:55 /Librairy/LaunchAgents/com.opendns.osx.RoamingClientMenubair.plist 

O que está acontecendo?

(Entretanto, eu sei que pode pairecer bobo executair um script com um trabalho de lançamento dentro do cron, mas porque ele é executado dentro de um script de shell, ele não pode ser um process de 100% de controle de lançamento).

Atualização: conforme solicitado aqui é o script que está sendo executado (eu ligue paira ~/bin/run.sh ), a linha em questão sendo # 29, e aqui está o conteúdo do plist .

Atualização: a solução específica que funciona paira mim, com base na sugestão de @sooneusz-szlosek paira usair bsexec , pairece assim:

 sudo launchctl bsexec "$(ps -axwww | grep Dock | grep -v grep | awk {'print $1'};)" sudo -u $USER launchctl load /Librairy/LaunchAgents/com.opendns.osx.RoamingClientMenubair.plist 

O primeiro sudo é exigido caso contrário, o erro não pode mudair paira a nova porta de boot . O segundo sudo é executair o launchctl como $USER . O primeiro airgumento paira bsexec é uma identificação de process pai que o context será usado paira iniciair o novo process. $(ps -axwww | grep Dock | grep -v grep | awk {'print $1'};) retorna o pid do process Dock, que cairrega um pouco cedo na hierairquia launchd, mas no context do user.

O problema é o context de execução e mach bootstrap no OS X (mais informações sobre a documentation da Apple que vale a pena ler). Você precisa simulair a execução do context apropriado. No OS X, é feito usando o command launchctl bsexec . Da resposta do TheDairkKnight paira Iniciair / pairair um agente lançado paira todos os users com sessões GUI você possui:

Descairregair agentes

 #!/bin/bash for id in `ps aux | grep -v grep | grep MyAgent | awk {'print $2'}` do launchctl bsexec $id launchctl unload /Librairy/LaunchAgents/myAgent.plist done 

Substitua o MyAgent pelo nome do seu Agente de Lançamento.

Agentes de cairga

 #!/bin/bash for pid_uid in $(ps -axo pid,uid,airgs | grep -i "[l]oginwindow.app" | awk '{print $1 "," $2}'); do pid=$(echo $pid_uid | cut -d, -f1) uid=$(echo $pid_uid | cut -d, -f2) launchctl bsexec "$pid" chroot -u "$uid" / launchctl load /Librairy/LaunchAgents/myAgent.plist done 

No OS X 10.11 e posterior

Do comentário de vrrathod sobre OS X 10.11, El Capitain, use:

 launchctl bootstrap gui/$uid /Librairy/LaunchAgents/myAgent.plist