![Синтаксис Crontab; Несколько команд](https://rvso.com/image/1087101/%D0%A1%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%81%20Crontab%3B%20%D0%9D%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4.png)
Я хотел бы получить следующую цепочку команд в качестве 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
решение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'