我想将以下命令链作为 cronjob 来执行:
* * * * * source activate myenv3 && cd ~/foo/bar && python sssb.py
它在控制台中工作,但我没有从 cronjob 获得任何输出。
我跟着这建议,将其替换为
* * * * * env > /tmp/env.output
找出环境是否不同。除了 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 中,默认情况下,守护进程使用()shellcron
运行所有作业,并且没有内置。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'