crontab 語法;多個命令

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

答案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'

相關內容