我在執行 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 變數時遇到問題
HOME
crontab 頂部定義的不是 shell 變量,而是環境變數。
您無法在 crontab 頂部引用環境變量,因為沒有 shell 處理它們,因此它們不會擴展(並按字面解釋)。
您必須JOBS_PATH
手動設定:
# ...
JOBS_PATH=/home/ubuntu/cronjobs
# ...