
cron ジョブの実行中にシェル変数にアクセスする際に問題が発生します。実際には、2 つのシェル変数値をファイルに出力するジョブを作成しました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
シェル変数にアクセスする際に問題が発生しました
HOME
crontab の先頭で定義されているのはシェル変数ではなく、環境変数です。
環境変数はシェルによって処理されないため、crontab の先頭で参照することはできません。したがって、環境変数は展開されません (文字通り解釈されません)。
手動で設定する必要がありますJOBS_PATH
:
# ...
JOBS_PATH=/home/ubuntu/cronjobs
# ...