無法存取 crontab 配置中的 shell 變數

無法存取 crontab 配置中的 shell 變數

我在執行 cron 作業時存取 shell 變數時遇到問題。實際上,我建立了一個將兩個 shell 變數值列印到檔案中的作業env.output

我正在使用命令$ crontab -e(沒有 sudo 使用者)編寫 cron 作業。

我的 crontab 設定檔如下所示:-

# varibales
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
     /usr/games:/usr/local/games
[email protected]
HOME=/home/ubuntu
JOBS_PATH=${HOME}/cronjobs

# Jobs
* * * * * echo "$HOME and $JOBS_PATH" >> ${HOME}/env.output 2>&1

所以,現在當我看到文件的內容時env.output,我得到這個輸出

/home/ubuntu and ${HOME}/cronjobs

這不是我所期望的。

我希望我的輸出應該是這樣的:-

/home/ubuntu and /home/ubuntu/cronjobs

建議我一些方法來處理這個問題。

答案1

這是 cron 守護程式的限制。看到這個來自crontab 的線上說明頁:

值字串是不是解析環境替換或變數替換,因此如下行:

     PATH = $HOME/bin:$PATH

不會像你想像的那樣工作。

您可以採取解決方法,因為 bash 將波形符號 ( ~) 視為$HOME.因此使用:

JOBS_PATH=~/cronjobs

答案2

我在存取 shell 變數時遇到問題

HOMEcrontab 頂部定義的不是 shell 變量,而是環境變數。

您無法在 crontab 頂部引用環境變量,因為沒有 shell 處理它們,因此它們不會擴展(並按字面解釋)。

您必須JOBS_PATH手動設定:

# ...
JOBS_PATH=/home/ubuntu/cronjobs
# ...

相關內容