Cron

在 crontab 的路徑中使用變數

  • June 26, 2020

我使用的 crontab 更複雜,但我將問題分解為最小的問題集。

我的 crontab 是這樣工作的:

mypath='/home/user/opt/script_home'
myscript='/home/user/opt/script_home/myscript.py'
* * * * * "$myscript"

但不是這樣:

mypath='/home/user/opt/script_home'
myscript="${mypath}/myscript.py"
* * * * * "$myscript"

郵件目錄中的錯誤消息:

/bin/sh: ${mypath}/myscript.py: No such file or directory

python 解釋器在受限的 cron $PATH 下可用,所以這不是問題。

編輯:另外,如果我使用 bash 或 sh 執行 crontab,它執行時不會出錯。(當然是去掉 * * * * * 之後)

可能是我在這裡遺漏了一些非常基本的東西,但我現在繞了一段時間,然後在網上搜尋。但到目前為止,我的搜尋參數並不好。crontab 正在幾個位置使用公共路徑的醜陋用法,但這不是好的程式碼,因此讓我感到困擾。請幫助我擺脫痛苦=)

TL;DR:你不能。

根據man 5 crontab

值字元串不會被解析為環境替換或變數替換,因此像這樣的行

PATH = $HOME/bin:$PATH

不會像您預期的那樣工作。

cron的解析器不如bash'.

您可以在 .bash_profile 或 .bashrc 文件中配置 mypath 這個變數,然後就可以訪問它了。

vi .bash_profile or vi .bashrc 

然後添加下面的路徑並保存

mypath='/home/user/opt/script_home'

引用自:https://serverfault.com/questions/904237