crontab 設定でシェル変数にアクセスできません

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

この問題に対処する方法を提案してください。

答え1

これはcronデーモンの制限です。crontab のマニュアルページ:

値文字列はない環境の置換または変数の置き換えのために解析されます。つまり、次のような行になります。

     PATH = $HOME/bin:$PATH

期待通りには動作しません。

bash はチルダ ( ~) を の置換として扱うため、回避策を講じることができます$HOME。したがって、次を使用します。

JOBS_PATH=~/cronjobs

答え2

シェル変数にアクセスする際に問題が発生しました

HOMEcrontab の先頭で定義されているのはシェル変数ではなく、環境変数です。

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

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

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

関連情報