crontab
NinGoo's blog

在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;
}