O comando 'which' não retorna nada via cron, mas funciona via console

1

Eu escrevi um pequeno utilitário no haXe + Neko que precisa executar alguns comandos do GIT. Para evitar codificar o caminho para o executável do GIT, eu gostaria de usar o comando which para descobrir onde ele está. Tudo funciona como esperado ao executar manualmente a partir do console, mas não quando o aplicativo é executado em um trabalho cron.

Estou ciente do ambiente restrito ( aqui ou aqui ) quando você executa um script usando cron, mas ainda surpreso, isso não funciona:

/usr/bin/which git >> /home/user/git.txt

O arquivo de texto é criado, mas o conteúdo está vazio. Novamente, quando executado a partir do console, ele funciona como esperado.

Alguma ideia? Estou executando o OS X Leopard, se isso ajudar.

Obrigado :)

Juan

    
por Juan Delgado 26.04.2010 / 23:52

3 respostas

3

Se 'qual' poderia encontrar o executável, o mesmo poderia acontecer com o interpretador de shell que está executando seu comando cron. Então eu não vejo por que você quer usar 'which' para esse propósito. Mas talvez você tenha algum motivo que não seja aparente.

O comando 'which' usa os diretórios listados em $ PATH para procurar a primeira ocorrência de um comando. Muito provavelmente, o PATH não está definido para o que você acha que é. Tente adicionar "/ usr / bin / env > > /home/user/you/env.txt 'para o seu crontab para ser executado hoje, daqui a um minuto. Então, olhe em /home/user/you/env.txt para ver qual PATH foi definido. Se esse PATH não for adequado para seus propósitos, você pode ter que colocar todos os seus comandos em um script de shell pequeno, onde você mesmo pode configurar o PATH. Você também pode procurar nesse arquivo env.txt por outras variáveis ambientais exportadas, pois isso pode ser útil, dependendo do que você deseja fazer através do seu crontab.

    
por 27.04.2010 / 00:58
2

Onde o git está realmente localizado (ou seja, se você executar /usr/bin/which git do console, o que ele imprime)? Se não estiver em um diretório em $ PATH (que é apenas / usr / bin e / bin em minha máquina do Snow Leopard), /usr/bin/which não o encontrará, e você precisará codificar ou adicionar uma linha como

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

para o arquivo crontab.

    
por 27.04.2010 / 00:39
0

Isso faria o truque?

/usr/bin/env  git

O comando env cuida de encontrar o comando, e está sempre em / usr / bin (então me disseram ...) Esse é um truque comum em scripts Python, necessário devido a diferentes distro colocando python em lugares diferentes, mas ninguém quer brincar de tentar descobrir onde.

    
por 17.12.2010 / 01:10