Cron
在 crontab 的路徑中使用變數
我使用的 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'