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
この問題を処理する方法をいくつか提案してください。
シェル変数へのアクセスに問題があります
crontabの上部で定義されているHOME
は、シェル変数ではなく、環境変数です。
シェルはそれらを処理しないため、crontabの上部で環境変数を参照することはできません。したがって、環境変数は展開されません(文字通り解釈されません)。
JOBS_PATH
を手動で設定する必要があります。
# ...
JOBS_PATH=/home/ubuntu/cronjobs
# ...
これは、cronデーモンの制限です。 crontabのマンページ からこれを見てください:
値の文字列はnot環境の置換または変数の置換のために解析されるため、次のような行です。
PATH = $HOME/bin:$PATH
期待どおりに動作しません。
Bashはチルダ(~
)を$HOME
の代わりとして扱うため、回避策を実行できます。したがって、以下を使用します。
JOBS_PATH=~/cronjobs