crontab执行脚本和手动执行脚本输出结果不一致的问题处理

  背景:huskiesir最近用公司给分配的账户写了脚本去检测某应用状态并发送到企业邮箱,写完脚本之后去执行了一下,发现效果还不错,在邮箱显示效果如下:

  10.11.116.6  检查结果OK,检查时间:2018-11-16_15:26:04

  但是呢,经过crontab自动执行以后才发现,显示效果是这样的:

  检查结果OK,检查时间:2018-11-16_13:17:05

  咦,我的ip地址呢,这个问题搞得huskiesir一脸懵逼,为嘛经过crontab自动执行就出问题了?ok,接下来看看我写的脚本 

#!/bin/bash
export ip=`ifconfig|sed -n '2p'|sed 's/.*addr://g'|sed 's/Bcast.*//g'`
cd /home/aaa/aaa_hb
export okcount=`/home/aaa/aaa_hb/lijian.sh app|grep -o 'OK'|wc -l`
if [ $okcount -eq 6 ]
then
        echo "${ip}检查结果OK,检查时间:`date +%F_%T`">/tmp/jinan/logs/`date +%F_%T`.OK
        echo "${ip}检查结果OK,检查时间:`date +%F_%T`"|mail -s "${ip}App_sucess" 1111@qq.comecho "${ip}检查结果OK,检查时间:`date +%F_%T`"|mail -s "${ip}App_sucess" 2222@qq.comelse
        echo "$ip检查结果wrong,检查时间:`date +%F_%T`">/tmp/jinan/logs/`date +%F_%T`.FALSE
        echo "$ip检查结果wrong,检查时间:`date +%F_%T`"|mail -s "$ip\App_fail" 1111@qq.comecho "$ip检查结果wrong,检查时间:`date +%F_%T`"|mail -s "$ip\App_fail" 2222@qq.comfi

  嗯,脚本也看到了,其实就是我去做了截取ip地址的操作,把其结果赋值给ip这个变量,嗯,这样看确实看不出什么,那就在出问题的环节去找吧~这让我想起了crontab,去查看crontab的日志看看能不能发现问题

  在进行排查之前,先普及下关于crontab日志相关的知识和操作:

    查看crontab任务是否执行需要查看:/var/log/cron

    查看crontab任务执行的过程需要查看:/var/spool/mail/用户名文件

  ok,那好,先查看crontab任务是否执行:

[root@AAA-111W-APP09:/aaa]#tail -n 3 /var/log/cron
Nov 16 10:00:01 SSS-537W-APP01 CROND[41846]: (sss) CMD (/tmp/jinan/countok.sh) Nov 16 10:16:01 SSS-537W-APP01 CROND[59810]: (sss) CMD (/tmp/jinan/countok.sh) Nov 16 10:19:01 SSS-537W-APP01 CROND[63002]: (sss) CMD (/tmp/jinan/countok.sh)

  从图中可以看到,任务已经成功执行,接着去查看crontab在执行脚本的过程:

[root@AAA-111W-APP09:/aaa]#tail -n 50 /var/spool/mail/aaa
From root@AAA-111W-APP09.localdomain  Fri Nov 16 13:17:06 2018
Return-Path: <root@SSS-537W-APP09.localdomain>
X-Original-To: aaa
Delivered-To: aaa@SSS-111W-APP09.localdomain
Received: by AAA-111W-APP09.localdomain (Postfix, from userid 501)
        id 2FC7CF0; Fri, 16 Nov 2018 13:17:06 +0800 (CST)
From: root@SSS-537W-APP01.localdomain (Cron Daemon)
To: sss@AAA-111W-APP09.localdomain
Subject: Cron <aaa@AAA-111W-APP09> sh /tmp/jinan/countok.sh
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
X-Cron-Env: <LANG=en_US.UTF-8>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/aaa>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=aaa>
X-Cron-Env: <USER=aaa>
Message-Id: <20181116051706.2FC7CF0@SSS-111W-APP09.localdomain>
Date: Fri, 16 Nov 2018 13:17:01 +0800 (CST)

/tmp/jinan/countok.sh: line 5: ifconfig: command not found

  ok ,这个内容可以说信息量非常大了,我们可以从看到环境变量PATH=/usr/bin:/bin 执行用户USER=aaa,最有用的一条则是最下面的提示:ifconfig:command not found,哦?ifconfig命令还没有?ok,来让我们看一下ifconfig这条命令在哪里?

[aaa@AAA-111W-APP09:/home/sss]$which ifconfig
/sbin/ifconfig

  看到这里,你是不是明白为什么提示ifconfig:command not found了吧,嗯,看一下PATH变量的内容你就直到了,并没有包含/sbin,那么当你去执行ifconfig的时候,它找不到这条命令的,具体解决办法呢?就是在脚本里面声明一下环境变量喽,我是这样做的,在脚本里面重新定义一下PATH:

PATH="$PATH:/sbin"

  最后,再次crontab执行的时候,发现问题才解决了~

  在此,huskiesir也总结一下此类问题的解决思路:

    经过crontab才出现问题,所以重点应该放在crontab上才能解决问题,所以才有以下操作,

    •   先判断crontab是否有执行
    •   查看crontab的具体执行过程

转载于:https://www.cnblogs.com/huskiesir/p/9970291.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值