cron実行するscriptはfull pathでcrontab -eに登録しておけば、問題はありませんでしたが、忘れていました。
まず、次のscriptは環境変数のkey-valueを一覧表示するものです。
#!/usr/local/bin/perl use strict; use Date::Calc qw/Today_and_Now/; main(); sub main { print sprintf("#### %04d-%02d-%02d %02d:%02d:%02d", Date::Calc::Today_and_Now() ),"\n"; for my $atri_key ( sort keys %ENV){ print "$atri_key : $ENV{$atri_key}\n"; } print "\n"; }
このscriptをコマンドプロンプトから実行すると、次のように大量?のkey-valueが表示されます。
#### 2015-04-18 10:02:01 CATALINA_BASE : /home/endo/local/tomcat6 CATALINA_HOME : /home/endo/local/tomcat6 CVS_RSH : ssh G_BROKEN_FILENAMES : 1 HISTCONTROL : ignoredups HISTSIZE : 1000 HOME : /home/endo HOSTNAME : cent6.a5.jp HULEXEP : /usr/local/HULFT/bin HULPATH : /usr/local/HULFT/etc JAVA_HOME : /usr/local/java JAVA_OPTS : -Xmx1024m -XX:MaxPermSize=256m LANG : en_US.UTF-8 LESSOPEN : ||/usr/bin/lesspipe.sh %s LOGNAME : endo LS_COLORS : rs=0:di=01;34:ln=01;36: <略> ;36:*.xspf=01;36: MAIL : /var/spool/mail/endo OLDPWD : /home/endo PATH : /usr/local/HULFT/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin PWD : /home/endo/tmp/TEST_CRON QTDIR : /usr/lib64/qt-3.3 QTINC : /usr/lib64/qt-3.3/include QTLIB : /usr/lib64/qt-3.3/lib SHELL : /bin/bash SHLVL : 1 SSH_AUTH_SOCK : /tmp/ssh-pfLfn10070/agent.10070 SSH_CLIENT : 192.168.56.1 51608 22 SSH_CONNECTION : 192.168.56.1 51608 192.168.56.101 22 SSH_TTY : /dev/pts/0 TERM : xterm USER : endo _ : ./foo_1.pl
次にcrontabにscriptを登録し実行すると、環境変数が最低限のもののみになっていることが分かります。
$ crontab -l * * * * * /home/endo/tmp/TEST_CRON/foo_1.pl >> /home/endo/tmp/foo.log
#### 2015-04-18 10:05:01 HOME : /home/endo LANG : en_US.UTF-8 LOGNAME : endo PATH : /usr/bin:/bin PWD : /home/endo SHELL : /bin/sh SHLVL : 1 USER : endo _ : /home/endo/tmp/TEST_CRON/foo_1.pl
環境変数は同一プロセスでのみ有効ですので、
$ crontab -l * * * * * /home/endo/.bash_profile;/home/endo/tmp/TEST_CRON/foo_1.pl >> /home/endo/tmp/foo.log
のように同一crontabのエントリで、.bash_profile を実行しても効果はありません。
$ crontab -l HULEXEP=/usr/local/HULFT/bin HULPATH=/usr/local/HULFT/etc * * * * * /home/endo/tmp/TEST_CRON/foo_1.pl >> /home/endo/tmp/foo.log
のようにcrontab内での環境変数登録が、最もお手軽です。