crontab 语法;多个命令

Foo*_*Bar 15 cron

我想将以下命令链作为 cronjob:

* * * * * source activate myenv3 && cd ~/foo/bar && python sssb.py
Run Code Online (Sandbox Code Playgroud)

它在控制台中工作,但我没有从 cronjob 中得到任何输出。

我遵循了这个建议,将其替换为

* * * * * env > /tmp/env.output
Run Code Online (Sandbox Code Playgroud)

找出 env 是否不同。除了 PATH 不同之外,我找不到任何相关的东西。然后我设置了

PATH=myPath
* * * * * source activate myenv3 && cd ~/foo/bar && python sssb.py
Run Code Online (Sandbox Code Playgroud)

它仍然不起作用。最后我用

PATH=myPath
* * * * * source activate myenv3 && cd ~/foo/bar && python sssb.py
* * * * * env > /tmp/env.output
Run Code Online (Sandbox Code Playgroud)

而这次我什至没有拿到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
Run Code Online (Sandbox Code Playgroud)

hee*_*ayl 23

在 Ubuntu 中,默认情况下,cron守护程序使用sh( dash) shell运行所有作业,dash并且没有source内置。

您需要使用 POSIX 方式,即.

* * * * * . activate myenv3 && cd ~/foo/bar && python sssb.py
Run Code Online (Sandbox Code Playgroud)

或者,您可以将作业作为以下参数运行bash

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

  • `"$(command -v bash)" -c '...'` 的 command -v 部分毫无意义。只需执行`bash -c '...'` (2认同)