在Crontab中调度Perl程序的环境变量问题
在corntab中调度perl程序时,如何获取并设置环境变量是一大问题。在shell脚本中,我一般是通过直接调用~/.profile或者~/.bash_profile(视shell类型而定)来解决。而Perl中则没有一个现成的比较方便的方法。
老楼最近在一篇blog中给出了一种方法,基本上能解决上述问题,但主要是针对ORACLE_HOME,其他的还需要再写一个差不多的函数,并且还需要配置文件,通用性不是太好。
我的办法是,直接利用.profile或者.bash_profile,在perl中循环将所有的环境变量一次性设置好。这个设置过程,我写成了一个函数放在公共模块中,只需要在脚本中包含该模块,然后调用一次该函数即可。因为要兼容Oracle和MySQL,按照我们的安装规范,Oracle安装用户为oracle,而MySQL数据库的安装用户为mysql,相应的脚本使用相应的用户。自动化是需要建立在规范之上的,下面是函数代码:
sub set_env{
my $user=`whoami`;
chomp($user);
my $profile="/home/".$user."/.profile";
if (! -e $profile ){
$profile="/home/".$user."/.bash_profile"
}
open(NEWENV, ". $profile && env|");
while (){
if (/(\w+)=(.*)/){
$ENV{$1}="$2";
}
}
close NEWENV;
}