crontabに設定書いて実行した場合の環境変数を調べてみた

cronって実行ユーザーや環境変数がどうなるのかよく分からず、なんとなく避けてたんですが、いい加減調べてみる事にしました。
crontabで色々設定したのとsshでログインしてる際の環境変数を比べます。
ちょっと色々と入れてあったりと雑多な環境なので、こういうの確認するにはあんまり良くなかったかもしれないけど。

結論

cronで実行したら環境変数はやっぱりPATHなども全然設定されてない。bashをログインシェルとして起動しても、sshでログインした環境とは若干違う。

crontabでただ実行するだけ

$ crontab -l
10  17  *   *   *   printenv
SHELL=/bin/sh
USER=myuser
PATH=/usr/bin:/bin
PWD=/home/myuser
SHLVL=1
HOME=/home/myuser
LOGNAME=myuser
_=/usr/bin/printenv

crontabでSHELLを設定

$ crontab -l
SHELL = /bin/bash
13  17  *   *   *   printenv
SHELL=/bin/bash
USER=myuser
PATH=/usr/bin:/bin
PWD=/home/myuser
SHLVL=1
HOME=/home/myuser
LOGNAME=myuser
_=/usr/bin/printenv

crontabでbashをログインシェルとして起動する

$ crontab -l
16  17  *   *   *   bash --login -c 'printenv'
GRAILS_HOME=/usr/local/grails
HOSTNAME=localhost.localdomain
SHELL=/bin/sh
HISTSIZE=1000
APPENGINE_HOME=/usr/local/appengine-java-sdk-1.3.0
USER=myuser
LS_COLORS=
MAVEN_HOME=//usr/local/apache-maven-2.2.1
MAIL=/var/spool/mail/myuser
PATH=/usr/kerberos/bin:/usr/bin:/bin:/usr/java/latest/bin:/usr/local/groovy/bin:/usr/local/grails/bin://usr/local/apache-maven-2.2.1/bin:/usr/local/appengine-java-sdk-1.3.0/bin:/home/myuser/bin
INPUTRC=/etc/inputrc
PWD=/home/myuser
JAVA_HOME=/usr/java/latest
LANG=ja_JP.UTF-8
HOME=/home/myuser
SHLVL=2
LOGNAME=myuser
GROOVY_HOME=/usr/local/groovy
CVS_RSH=ssh
CLASSPATH=.:/usr/java/latest/jre/lib:/usr/java/latest/lib:/usr/java/latest/lib/tools.jar:/usr/local/groovy/embeddable/groovy-all-1.6.7.jar
LESSOPEN=|/usr/bin/lesspipe.sh %s
G_BROKEN_FILENAMES=1
_=/usr/bin/printenv

sshでログインした場合

$ printenv
GRAILS_HOME=/usr/local/grails
HOSTNAME=localhost.localdomain
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.35.74 4102 22
APPENGINE_HOME=/usr/local/appengine-java-sdk-1.3.0
SSH_TTY=/dev/pts/35
USER=myuser
LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:
MAVEN_HOME=//usr/local/apache-maven-2.2.1
MAIL=/var/spool/mail/myuser
PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/java/latest/bin:/usr/local/groovy/bin:/usr/local/grails/bin://usr/local/apache-maven-2.2.1/bin:/usr/local/appengine-java-sdk-1.3.0/bin:/home/myuser/bin
INPUTRC=/etc/inputrc
PWD=/home/myuser
JAVA_HOME=/usr/java/latest
LANG=ja_JP.UTF-8
SHLVL=1
HOME=/home/myuser
LOGNAME=myuser
GROOVY_HOME=/usr/local/groovy
CVS_RSH=ssh
CLASSPATH=.:/usr/java/latest/jre/lib:/usr/java/latest/lib:/usr/java/latest/lib/tools.jar:/usr/local/groovy/embeddable/groovy-all-1.6.7.jar
SSH_CONNECTION=192.168.35.74 4102 192.168.14.56 22
LESSOPEN=|/usr/bin/lesspipe.sh %s
G_BROKEN_FILENAMES=1
_=/usr/bin/printenv

PATHの比較

色々ごちゃごちゃとしてる環境だったからかもしれないけど、若干PATHが違いました。

crontabでbashをログインシェルとして起動する
PATH=/usr/kerberos/bin:/usr/bin:/bin:/usr/java/latest/bin:/usr/local/groovy/bin:/usr/local/grails/bin://usr/local/apache-maven-2.2.1/bin:/usr/local/appengine-java-sdk-1.3.0/bin:/home/myuser/bin
sshでログインした場合
PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/java/latest/bin:/usr/local/groovy/bin:/usr/local/grails/bin://usr/local/apache-maven-2.2.1/bin:/usr/local/appengine-java-sdk-1.3.0/bin:/home/myuser/bin