はじめに
cronで実行する際はではユーザー環境変数が反映されません。
cronではノンインタラクティブノンログインシェルでの実行になるため、~/.bashrc
や/etc/profile.d/*.sh
が読み込まれないことが原因です。
この問題を解決するために、cronの-l
オプションを用いてログインシェルで実行するというやり方がありますが、ユーザー環境変数がそのまま反映されるため影響範囲が大きいです。
そのため必要な環境変数だけを設定し、cronで環境変数を利用するプログラムを使用する場合はひと工夫必要となり、今回はそのことを記事に書こうと思います。
もし誤っている内容などがあれば、コメントで訂正していただけると大変助かります。
全体の流れ
とは言っても簡単で、以下の手順で設定することで可能です。
- 環境変数を設定するコマンドが記載されたシェルスクリプトを記載
- cronで環境変数を使用する定期実行したいコマンドを書く前に
source
コマンドでシェルスクリプトを読み込む
(1) シェルスクリプトの記載
cronを実行するユーザーがアクセス可能な任意の場所に環境変数を設定するシェルスクリプト配置します。
またその際に、ファイルの実行権限を意識する。
# ファイルの所有者・グループ所属を変更
sudo chown <実行ユーザー> /path/to/shell_file.sh
# ファイルの所有者の場合
sudo chmod 700 /path/to/shell_file.sh
(2) cronの設定
以下のように設定することで、cronで定期実行したいコマンド上で環境変数を利用できます。
crontab -e
* * * * * <実行ユーザー> source /path/to/shell_file.sh && <設定した環境変数を利用する定期実行したいコマンド>