web-dev-qa-db-ja.com

crontab構成のシェル変数にアクセスできません

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

この問題を処理する方法をいくつか提案してください。

2

シェル変数へのアクセスに問題があります

crontabの上部で定義されているHOMEは、シェル変数ではなく、環境変数です。

シェルはそれらを処理しないため、crontabの上部で環境変数を参照することはできません。したがって、環境変数は展開されません(文字通り解釈されません)。

JOBS_PATHを手動で設定する必要があります。

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

これは、cronデーモンの制限です。 crontabのマンページ からこれを見てください:

値の文字列はnot環境の置換または変数の置換のために解析されるため、次のような行です。

     PATH = $HOME/bin:$PATH

期待どおりに動作しません。

Bashはチルダ(~)を$HOMEの代わりとして扱うため、回避策を実行できます。したがって、以下を使用します。

JOBS_PATH=~/cronjobs
4
chaos