Синтаксис Crontab; Несколько команд

Я хотел бы получить следующую цепочку команд в качестве cronjob:

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

Это работает в консоли, но я не получаю никакого вывода из cronjob.

Я последовал этому предложению, заменив его на

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

, чтобы выяснить, отличается ли env. Я не мог найти ничего важного, кроме того, что PATH отличается Итак, я настроил

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

, и он все еще не работал. Наконец я заменил его на

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

, и на этот раз я даже не получил файл env.output. Следовательно, я думаю, что что-то не так с моим синтаксисом - но он выглядит точно так же, как и предложения с несколькими командами, которые я нашел в Интернете.

Что здесь происходит? Если это не очевидно, что я могу затем отследить ошибку?

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
11
задан 13 April 2017 в 15:25

1 ответ

В Ubuntu, по умолчанию, cron демон выполняет все задания с помощью sh (dash), оболочка и dash не имеет source встроенный.

необходимо использовать POSIX путь т.е. .:

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

Поочередно, можно выполнить задание как аргумент bash:

* * * * * "$(command -v bash)" -c 'source activate myenv3 && cd ~/foo/bar && python sssb.py'
12
ответ дан 14 April 2017 в 01:25
  • 1
    Спасибо за помощь. Я пытался сделать это для много раз..... никаких результатов. Какие-либо другие идеи? – fyarik 30 August 2017 в 21:19

Другие вопросы по тегам:

Похожие вопросы: