Sintaxe de Crontab; Vários comandos

4

Eu gostaria de obter a seguinte cadeia de comandos como um cronjob:

* * * * * source activate myenv3 && cd ~/foo/bar && python sssb.py

Funciona no console, mas eu não recebo nenhuma saída do cronjob.

Eu segui esta sugestão , substituindo-a por

* * * * * env > /tmp/env.output

para descobrir se env é diferente. Eu não encontrei 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 com

PATH=myPath
* * * * * source activate myenv3 && cd ~/foo/bar && python sssb.py
* * * * * env > /tmp/env.output

e desta vez nem obtive o arquivo env.output . Por isso acho que há algo errado com a minha sintaxe - mas parece exatamente como as sugestões de multi-comando que encontrei online.

O que está acontecendo aqui? Se não é óbvio, o que eu posso fazer para descobrir 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
    
por FooBar 31.03.2016 / 13:09

1 resposta

8

No Ubuntu, por padrão, o daemon cron executa todas as tarefas usando sh ( dash ) shell e dash não tem source builtin.

Você precisa usar a forma POSIX, por exemplo, . :

* * * * * . activate myenv3 && cd ~/foo/bar && python sssb.py

Como alternativa, você pode executar o trabalho como um argumento para bash :

* * * * * "$(command -v bash)" -c 'source activate myenv3 && cd ~/foo/bar && python sssb.py'
    
por heemayl 31.03.2016 / 13:26

Tags