免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1462 | 回复: 5
打印 上一主题 下一主题

crontab,perl,system,@INC [复制链接]

论坛徽章:
78
双子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06狮子座
日期:2013-10-18 13:40:31双子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56处女座
日期:2013-10-24 17:15:30双子座
日期:2013-10-25 13:49:39午马
日期:2013-10-28 15:02:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-12 17:55 |只看该作者 |倒序浏览
今天写了个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当前用户的环境。

论坛徽章:
0
2 [报告]
发表于 2012-04-12 18:06 |只看该作者
为啥不直接用pm包所对应的perl解释器去执行你的myperl.pl,不然又是@INC,又是source的,另外,也很可能导致那pm包在当前perl解释器下不可用

论坛徽章:
78
双子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06狮子座
日期:2013-10-18 13:40:31双子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56处女座
日期:2013-10-24 17:15:30双子座
日期:2013-10-25 13:49:39午马
日期:2013-10-28 15:02:15
3 [报告]
发表于 2012-04-12 18:32 |只看该作者
回复 2# sjdy521


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

论坛徽章:
1
狮子座
日期:2013-12-16 16:09:24
4 [报告]
发表于 2012-04-12 20:10 |只看该作者
回复 1# yybmsrs


    myperl 头上写:

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

假设myperl.pl 和它的pm在同一个目录下

论坛徽章:
0
5 [报告]
发表于 2012-04-13 08:57 |只看该作者
本帖最后由 kk861123 于 2012-04-13 08:58 编辑
system确实不会复制当前的环境

您说的意思是system的执行程序时,环境变量没有从主程序中继承下来吗?

论坛徽章:
0
6 [报告]
发表于 2012-04-13 12:37 |只看该作者
和crontab执行的环境变量设置有关的,建议man一下crontab
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP