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 ]
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执行脚本和手动执行脚本输出结果不一致的问题处理的更多相关文章
- .net 程序通过 crontab 无法启动,手动执行脚本可以启动
一.问题描述 .net 网关程序需要设置定时重启,按照日常操作先把正在运行的 PID kill 掉后,再执行启动服务. 把脚本放到 crontab 计划任务上,可以把服务 PID kill 掉,但无法 ...
- crontab的定时任务不能自动执行,但是手动执行脚本一直能成功
crontab 问题小记: 环境变量问题, 养成良好的习惯, 在脚本开头export PATH 原因是 crontab 执行定时任务时,用的不是系统环境变量,而是自己的环境变量,可以把 echo $P ...
- crontab执行脚本与手动执行结果不一致
反正网上说是环境变量问题,我就直接在脚本第二行加入以下代码: source /etc/profile source ~/.bashrc 问题是解决了!
- 关于linux crontab定时操作oracle不执行的问题解决方案
问题描述:启动定时任务对oracle表进行操作,但是手动执行脚本无问题,定时任务执行无结果不反馈消息 解决方案:以centos7为例吗,首先确定脚本可手动执行,然后检查/var/log/cron下的日 ...
- crontab执行脚本中文乱码,手动执行没有问题
crontab执行脚本中文乱码,手动执行没有问题 产生原因: 这是因为Unix/Linux下使用crontab时的运行环境已经不是用户环境了,因此原本用户下的一些环境变量的设置就失效了.例 ...
- crontab 定时执行脚本出错,但手动执行脚本正常
原因: crontab 没有去读环境变量,需要再脚本中手动引入环境变量,可以用source 也可以用export 写死环境变量. 为了定时监控Linux系统CPU.内存.负载的使用情况,写了个Shel ...
- 分享一个shell脚本的坑:grep匹配+wc取值 在脚本执行后的结果与手动执行结果不一致
打算在跳板机上写一个shell脚本,批量检查远程服务器上的main进程是否在健康运行中. 先找出其中一台远程机器,查看main进程运行情况 [root@two002 tmp]# ps -ef|grep ...
- linux crontab定时任务运行shell脚本(shell执行sql文件)
https://www.cnblogs.com/tiankongjava/p/6106743.html 今天做个linux定时任务(每晚12点把表汇总). 顺便写个博客记录一下~~ 为什么用linux ...
- jeecg安装——mysql数据库创建+手动执行初始化脚本
国产的开源项目官方文档写得那么详细,已经是很厚道了,可惜俺这种菜鸟还是会碰到各种"小"问题,做个笔记先! 1.新建数据库: CREATE DATABASE jeecg DEFAUL ...
随机推荐
- python生成器,递归调用
生成器 什么是生成器:只要在函数体内出现yield关键字,那么再执行函数就不会执行函数代码,会得到一个结果,该结果就是生成器 生成器就是迭代器 yield的功能 yield为我们提供了一种自定义迭代器 ...
- ubuntu qq2012
wine qq 2012 for linux Ubuntu 64位兼容(12月21日末日版) 版主: byebye, liyijun, smile, wolfstar 发表回复 340 篇帖子 • ...
- Run Nutch In Eclipse on Linux and Windows nutch version 0.9
Running Nutch in Eclipse Here are instructions for setting up a development environment for Nutch un ...
- COGS——T 438. 烦人的幻灯片
http://www.cogs.pro/cogs/problem/problem.php?pid=438 ★☆ 输入文件:slides.in 输出文件:slides.out 简单对比时间限 ...
- 洛谷 P3507 [POI2010]GRA-The Minima Game
P3507 [POI2010]GRA-The Minima Game 题目描述 Alice and Bob learned the minima game, which they like very ...
- Qt之窗体拖拽、自适应分辨率、自适应大小
简述 在自定义无边框.标题栏的界面中,需要自己实现最小化.最大化.关闭.窗体背景等功能.最小化.最大化.关闭等按钮设计及功能比较简单,这里就不多做介绍.今天主要介绍一下绘制背景的问题,主要实现自适应屏 ...
- C++ throw的实验 & 异常类继承关系
如果定义了 throw() 表示函数不抛出异常,这时候如果还是抛出,会导致运行时错误. #include <iostream> #include <exception> #in ...
- Yocto tips (19): Yocto SDK Toolchian的使用
在使用之前须要先source env,导入各种环境变量(注意将路径变更成你自己的): source ../qt5_sdk/environment-setup-cortexa9hf-vfp-neon-p ...
- 基于MySQL元数据的Hive的安装和简单測试
引言: Hive是一种强大的数据仓库查询语言,类似SQL,本文将介绍怎样搭建Hive的开发測试环境. 1. 什么是Hive? hive是基于Hadoop的一个数据仓库工具,能够将结构化的数据文件映射为 ...
- Mongodb简单介绍
1. 简单介绍 Mongodb是一种强大.灵活,可扩展的数据存储方式.属于nosql.非关系型数据库的一种. mongodb是面向文档的数据库. 尽管是非关系型数据库.可是它保留了很多关系型数据库的特 ...