LoginSignup
26
23

More than 5 years have passed since last update.

cronの環境変数について

Last updated at Posted at 2016-12-19

はじめに

cronを実行する度に、**** is not foundと言われてがっくり来ちゃうので、cronの初期値って一体どうなってるの?と思い、調べてみた次第です。

結論

crontab -eなどでPATH変数を明示的に宣言してやらないと、/usr/bin/binしか参照できないようでした。/etc/crontabなどでもPATHは宣言可能のようですが、それは他の記事をググれば良いかと。

対象環境

  • OS
    • Ubuntu 16.x Server 64bit

初期環境変数

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
  *  *  *  *  * env > /tmp/env.log

上記で取り出した、cron実行時の環境変数が下記。
/usr/bin/binしか参照しないんですね。

HOME=/home/imasami
LOGNAME=imasami
PATH=/usr/bin:/bin
LANG=en_US.UTF-8
SHELL=/bin/sh
PWD=/home/imasami

crontabに最初から書かれていたのは下記で、何故かPATHが大きく違う。

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

これはさておき、好きなPATHにしてしまいましょうか。

crontab -e 環境変数を書き換え

PATH=/usr/bin:/usr/sbin:/home/imasami/.rbenv/shims/:$PATH

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
  *  *  *  *  * env > /tmp/env.log

crontab -eでPATHを宣言したら下記のように反映されているのを確認できた。

HOME=/home/imasami
LOGNAME=imasami
PATH=/usr/bin:/usr/sbin:/home/imasami/.rbenv/shims/:$PATH
LANG=en_US.UTF-8
SHELL=/bin/sh
PWD=/home/imasami

$PATHは展開されないんですね。

26
23
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
23