Crontab 语法;多个命令

Crontab 语法;多个命令

我想将以下命令链作为 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运行所有作业,并且没有内置。shdashdashsource

您需要使用 POSIX 方式,即.

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

或者,你可以将该作业作为参数运行bash

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

相关内容