Gostaria de obter a seguinte cadeia de comandos como um cronjob:
* * * * * source activate myenv3 && cd ~/foo/bar && python sssb.py
Funciona no console, mas não recebo nenhuma saída do cronjob.
eu seguiessesugestão, substituindo-o por
* * * * * env > /tmp/env.output
para descobrir se env é diferente. Não consegui encontrar nada relevante além de PATH ser diferente. Então eu configurei
PATH=myPath
* * * * * source activate myenv3 && cd ~/foo/bar && python sssb.py
e ainda não funcionou. Finalmente eu substituí-lo por
PATH=myPath
* * * * * source activate myenv3 && cd ~/foo/bar && python sssb.py
* * * * * env > /tmp/env.output
e dessa vez nem peguei o env.output
arquivo. Portanto, acho que há algo errado com minha sintaxe - mas parece exatamente com as sugestões de vários comandos que encontrei online.
O que está acontecendo aqui? Se não for óbvio, o que posso fazer para rastrear o erro?
PATH=/usr/local/anaconda2/envs/myenv3/bin:~/.conda:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
out.err
:
/bin/sh: 6: /usr/local/anaconda2/envs/myenv3/bin/activate: [[: not found
/bin/sh: 15: /usr/local/anaconda2/envs/myenv3/bin/activate: [[: not found
/bin/sh: 17: /usr/local/anaconda2/envs/myenv3/bin/activate: [[: not found
Only bash and zsh are supported
Responder1
No Ubuntu, por padrão, o cron
daemon executa todos os trabalhos usando sh
( dash
) shell e dash
não possui source
built-in.
Você precisa usar o método POSIX, ou seja .
:
* * * * * . activate myenv3 && cd ~/foo/bar && python sssb.py
Como alternativa, você pode executar o trabalho como argumento para bash
:
* * * * * "$(command -v bash)" -c 'source activate myenv3 && cd ~/foo/bar && python sssb.py'