背景: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 ]
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 :: SSS-537W-APP01 CROND[]: (sss) CMD (/tmp/jinan/countok.sh)
Nov :: SSS-537W-APP01 CROND[]: (sss) CMD (/tmp/jinan/countok.sh)
Nov :: SSS-537W-APP01 CROND[]: (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  ::
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 )
id 2FC7CF0; Fri, Nov :: + (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-
Auto-Submitted: auto-generated
X-Cron-Env: <LANG=en_US.UTF->
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: <.2FC7CF0@SSS-111W-APP09.localdomain>
Date: Fri, Nov :: + (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的具体执行过程

crontab执行脚本和手动执行脚本输出结果不一致的问题处理的更多相关文章

  1. .net 程序通过 crontab 无法启动,手动执行脚本可以启动

    一.问题描述 .net 网关程序需要设置定时重启,按照日常操作先把正在运行的 PID kill 掉后,再执行启动服务. 把脚本放到 crontab 计划任务上,可以把服务 PID kill 掉,但无法 ...

  2. crontab的定时任务不能自动执行,但是手动执行脚本一直能成功

    crontab 问题小记: 环境变量问题, 养成良好的习惯, 在脚本开头export PATH 原因是 crontab 执行定时任务时,用的不是系统环境变量,而是自己的环境变量,可以把 echo $P ...

  3. crontab执行脚本与手动执行结果不一致

    反正网上说是环境变量问题,我就直接在脚本第二行加入以下代码: source /etc/profile source ~/.bashrc 问题是解决了!

  4. 关于linux crontab定时操作oracle不执行的问题解决方案

    问题描述:启动定时任务对oracle表进行操作,但是手动执行脚本无问题,定时任务执行无结果不反馈消息 解决方案:以centos7为例吗,首先确定脚本可手动执行,然后检查/var/log/cron下的日 ...

  5. crontab执行脚本中文乱码,手动执行没有问题

    crontab执行脚本中文乱码,手动执行没有问题 产生原因:       这是因为Unix/Linux下使用crontab时的运行环境已经不是用户环境了,因此原本用户下的一些环境变量的设置就失效了.例 ...

  6. crontab 定时执行脚本出错,但手动执行脚本正常

    原因: crontab 没有去读环境变量,需要再脚本中手动引入环境变量,可以用source 也可以用export 写死环境变量. 为了定时监控Linux系统CPU.内存.负载的使用情况,写了个Shel ...

  7. 分享一个shell脚本的坑:grep匹配+wc取值 在脚本执行后的结果与手动执行结果不一致

    打算在跳板机上写一个shell脚本,批量检查远程服务器上的main进程是否在健康运行中. 先找出其中一台远程机器,查看main进程运行情况 [root@two002 tmp]# ps -ef|grep ...

  8. linux crontab定时任务运行shell脚本(shell执行sql文件)

    https://www.cnblogs.com/tiankongjava/p/6106743.html 今天做个linux定时任务(每晚12点把表汇总). 顺便写个博客记录一下~~ 为什么用linux ...

  9. jeecg安装——mysql数据库创建+手动执行初始化脚本

    国产的开源项目官方文档写得那么详细,已经是很厚道了,可惜俺这种菜鸟还是会碰到各种"小"问题,做个笔记先! 1.新建数据库: CREATE DATABASE jeecg DEFAUL ...

随机推荐

  1. Golang 源码剖析:log 标准库

    Golang 源码剖析:log 标准库 原文地址:Golang 源码剖析:log 标准库 日志 输出 2018/09/28 20:03:08 EDDYCJY Blog... 构成 [日期]<空格 ...

  2. 全面的framebuffer详解

    一.FrameBuffer的原理    FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口.    Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIO ...

  3. Django - 表与ORM操作

    Django - 表与ORM操作 一. 模板语言 模板中也有自己的语言, 该语言可以实现数据展示 - {{ 变量 }} - 循环 {% for i in all_publisher %} {{ for ...

  4. [luogu] P3210 [HNOI2010]取石头游戏(贪心)

    P3210 [HNOI2010]取石头游戏 题目描述 A 公司正在举办一个智力双人游戏比赛----取石子游戏,游戏的获胜者将会获得 A 公司提供的丰厚奖金,因此吸引了来自全国各地的许多聪明的选手前来参 ...

  5. VUE:条件渲染和列表渲染

    条件渲染 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...

  6. 原生JS中 callback,promise,generator,async-await 的简介

    callback,promise,generator,async-await 的简介 javascript异步的发展历程. ES6 以前: 回调函数(callback):nodejs express ...

  7. poi操作excel2007(读取、生成、编辑)

    因为现在再写excel2003版的比较low,所以我在这就不介绍了,直接介绍2007,我所用的编程软件是IDEA poi操作office总共有6个jar包,在pom.xml文件中配置如下,也可下载后直 ...

  8. 洛谷 P1894 [USACO4.2]完美的牛栏The Perfect Stall

    P1894 [USACO4.2]完美的牛栏The Perfect Stall 题目描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星 ...

  9. cocos2d-x-3.3rc2-003 cocos中的引用计数和自己主动释放池

    点击打开链接

  10. 任务调度器quartz的使用

    1.quartz的获取. 可參照:Quartz任务调度模型实例 2.开发思路: 要使用定时器quartz.先弄清楚三个概念:调度器.任务.触发器.开发也是依照这三个方面来开发, 1>写一个Job ...