crontab里调用perl的环境变量问题

前一段时间写了一个简单的perl自动发消息,里面用了连接数据库的模块,因为每天是定时采集的,就放在了crontab里,没有使用调度工具。结果就遇到了crontab的环境变量和系统环境变量不一致,在crontab里调用perl报错的问题。详情如下:

设置crontab的用户A,是可以正确执行perl脚本的,

将perl脚本加入crontab里,这里注意 2 > &1 ,我们需要通过这个去捕捉脚本运行日志

6 * * * * /home/stack/test.pl >>/mylog.log 2>&1

查看crontab日志

tail -10  /var/log/cron*

可以肯定的是perl被执行了,只是日志里只给出了执行串,这时查看mylog.log会发现,里面出现的报错信息如下(类似信息):

/usr/local/bin/svnlook:error while loading shared libraries :libdb-4.8.so:cannot open shared object file:No such file or directory

从日志看,是没有加载到DBI模块,但是测试时脚本绝对是正常的,其实这是因为crontab的环境变量和用户的环境变量不一致,所以导致部分模块的加载会报错。只要把crontab的调用上加上. ~/.bash_profile就行了,如下:

6 * * * * . ~/.bash_profile;/home/stack/test.pl >>/mylog.log 2>&1

还有其他网友提供了其他方案,比如写一个shell,在里面重新加载下环境变量,并调用perl,这也是一种解决方法

 

posted @ 2018-03-13 22:45  南瓜糊  阅读(518)  评论(0)    收藏  举报