D=~/brew\ update
# the above will never work unless you start script as you
# say you are user fred, this full path will always work
D=/home/fred/brew\ update
Cron trabalha com diferentes permissões e PATH do que usuário, em outras palavras o cron basicamente é seu próprio usuário (root), com seu próprio PATH etc. Não use ~ /, que se refere a outro diretório home, não ao seu, quando O cron inicia o job, que ~ / é relativo ao diretório home do usuário no sistema que inicia o job (root, neste caso). Use o caminho completo para 'atualizar brew' (e se você puder, se livrar desse nome de diretório com o espaço nele, se estiver sob seu controle). Eu não tenho ideia do que o cron faz com ~ / em termos de gerar um caminho porque ele nunca funcionará de maneira previsível, então eu nunca pensei sobre isso.
Com o cron, use SEMPRE os caminhos completos do sistema ou você receberá esses tipos de erros.
Em serverfault :
what user will [cron] run as?
They all run as root. If you need otherwise, use su in the script or add a crontab entry to the user's crontab (man crontab) or the system-wide crontab (whose location I couldn't tell you on CentOS).
Então, em teoria, você poderia usar ~ / que se traduziria na raiz do root, / root /, mas isso é uma péssima idéia sobre a legibilidade e testes, etc.
[update] Como foi dito, o problema aqui era 'brew' estar em / usr / local / bin, que não está no $ PATH do cron, que fez o comando 'brew' falhar, arquivo não encontrado. Eu perdi a última linha. Mas mais uma razão para usar sempre caminhos completos. Caminhos completos em todos os programas e arquivos resolverão todos esses problemas.