Chinaunix

标题: crontab,perl,system,@INC [打印本页]

作者: yybmsrs    时间: 2012-04-12 17:55
标题: crontab,perl,system,@INC
今天写了个perl程序要放到crontab执行,perl代码里面用system调用另外一个perl,以前都是写个sh来调用perl,今天懒得写了直接在crontab里面用perl,形如:1 * * * * myperl.pl

结果没执行,检查发现是perl不同解释器问题,就改为perl myperl.pl ,这次执行了,但是system调用的perl报错没有找到pm包,于是随手就在myperl.pl里面use lib "...",结果还是不行,

print @INC发现system没有用到use lib的路径,仔细一想system确实不会复制当前的环境。哎,真是一不小心就出错啊。

问题的根源就在于没有source当前用户的环境。
作者: sjdy521    时间: 2012-04-12 18:06
为啥不直接用pm包所对应的perl解释器去执行你的myperl.pl,不然又是@INC,又是source的,另外,也很可能导致那pm包在当前perl解释器下不可用
作者: yybmsrs    时间: 2012-04-12 18:32
回复 2# sjdy521


   恩。其实当前用户下所有的pl和pm用的都是同一个解释器,只是root没有这个解释器的环境。

作者: ttcn_cu    时间: 2012-04-12 20:10
回复 1# yybmsrs


    myperl 头上写:

use FindBin;
use lib "$FindBin::RealBin";

假设myperl.pl 和它的pm在同一个目录下
作者: kk861123    时间: 2012-04-13 08:57
本帖最后由 kk861123 于 2012-04-13 08:58 编辑
system确实不会复制当前的环境

您说的意思是system的执行程序时,环境变量没有从主程序中继承下来吗?
作者: qdice007    时间: 2012-04-13 12:37
和crontab执行的环境变量设置有关的,建议man一下crontab





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2