解决crontab无法读取环境变量

post by rocdk890 / 2012-8-15 15:40 Wednesday linux技术
   今天在公司服务器上设置一个crontab,*/1 * * * * /home/babypic/pic_batch/pic/post_image.sh,手动sh /home/babypic/pic_batch/pic/post_image.sh是可以执行的,但放到crontab里却无法运行,对脚本头部加上#!/bin/bash还是没有运行.而post_image.sh里的内容是:
#!/bin/bash
cd /home/babypic/pic_batch/pic/docroot
php -q cron.php --run=/push/post_image/index/

当看到php时,就想是不是系统没有识别我的php环境变量,然后执行了下php -v,发现是可以执行的.怀着试试的心态对php -q cron.php --run=/push/post_image/index/进行修改,修改成:
/usr/local/php/bin/php -q cron.php --run=/push/post_image/index/
然后再等crontab执行,发现成功.网上搜了下发现了问题所在:
crontab有一个坏毛病,就是它总是不会缺省的从用户profile文件中读取环境变量参数,经常导致在手工执行某个脚本时是成功的,但是到crontab中试图让它定期执行时就是会出错.
看了这个就知道怎么修改脚本了,脚本的头上用缺省的#!/bin/sh就可以,然后然后第一个部分先写这些:
###################
. /etc/profile
. ~/.bash_profile
##################
这样crontab在执行脚本的时候,就能够读到用户的环境变量参数.如下:
#!/bin/sh
. /etc/profile
. ~/.bash_profile
cd /home/babypic/pic_batch/pic/docroot
php -q cron.php --run=/push/post_image/index/

这样就不用在脚本里写全php路径了.
夜空- 本站版权
1、本站所有主题由该文章作者发表,该文章作者与夜空享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和夜空的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:blog.slogra.com/post-238.html

标签: crontab cron 执行 定时 环境变量 profile 环境 变量 读取

评论: