首页 > 系统服务 > 详细

crontab 定时执行shell脚本遇到的问题

时间:2016-03-11 06:41:18      阅读:200      评论:0      收藏:0      [点我收藏+]

近段时间使用crontab 定时执行shell脚本,来解析java项目日志,实现“日志解析”跟项目的业务逻辑解耦。编写shell脚本时倒是挺顺利的,但在添加crontab定时执行shell脚本时,遇到了麻烦事。


问题是这样的。我的shell脚本主要的代码是:(文件名为test.sh)

declare -i i

i=0

log_path=/home/testdata

cd $log_path

nowdate=$(date +%Y%m%d%H)

for file in `ls -1| grep -v completed | grep -v $nowdate |grep login.`

do

        file_list[$i]=$file

        i=`expr $i + 1`

        echo ${file_list[$i-1]}

done


在命令行里执行/bin/bash test.sh  ,能打印出筛选出的日志文件名。到这里感觉应该问题不大了。于是设置crontab定时任务(每分钟执行一次):

*/1 * * * * bash /tmp/shell_tasks/test.sh > /tmp/testlog.log 2> &1


这个时候问题来了: crontab任务没有反应!!!典型的问题,单独执行shell脚本没有问题,放到crontab里就不行!!!

根据前辈们的经验,这分明就是crontab的环境跟bash的不一样导致的。

给出解决方案有:

1、crontab命令里尽量使用全路径:/bin/bash

        */1 * * * * /bin/bash /tmp/shell_tasks/test.sh > /tmp/testlog.log 2> &1

2、shell脚本里要直接引入环境变量:

        首先是shell脚本开头添加这么一行:#!/bin/bash   (注意,每个字符之间都不要有空格)

        其次是引入profile文件里的环境变量,即添加这么一行: source /etc/profile

        最后就可以测试是否生效了。


后记: 在Linux里面,bash 和crontab 是两个不同的程序,crontab没有去直接获取bash的环境变量,导致两者并非一定能同时生效。



本文出自 “走在IT路上” 博客,请务必保留此出处http://andrewli.blog.51cto.com/7625043/1749700

crontab 定时执行shell脚本遇到的问题

原文:http://andrewli.blog.51cto.com/7625043/1749700

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!