背景
山东大葱哥写了一个bash脚本,主要内容包括:
- 连接数据库进行查询
- 将查询结果生成xls文件
- 将xls发送给指定邮箱
问题现象
手工执行该脚本一切正常,正常生成了xls文件,山东大葱哥也正常接收到了预期邮件。
于是为了方便,将其加入到了crontab中,设定为每日0点15分执行。奇怪的事情就发生了,每次山东大葱哥收到的邮件都是大小为0字节的xls文件。
问题追踪
后经仔细核查在linux的本地邮箱中找到了错误:
Message 3:
From root@iZ2364j30brZ Mon Sep 4 14:33:01 2017
Return-Path: <root@iZ2364j30brZ>
Date: Mon, 4 Sep 2017 14:33:01 +0800
From: root@iZ2364j30brZ (Cron Daemon)
To: root@iZ2364j30brZ
Subject: Cron <root@iZ2364j30brZ> /dailyReport/test/auto.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/bash>
X-Cron-Env: <PATH=/sbin:/bin:/usr/sbin:/usr/bin>
X-Cron-Env: <MAILTO=root>
X-Cron-Env: <HOME=/>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Status: R
/dailyReport/test/auto.sh: line 5: mysql: command not found
mysql在用户命令行状态是可以正常执行的,为什么在定时任务中不能执行呢?本地邮件中给出了理由,经山东大葱哥核查mysql确实不在cron执行的环境变量 中
<PATH=/sbin:/bin:/usr/sbin:/usr/bin>
问题解决
既然找到了问题,那么自然好找解决办法了,山东大葱哥在cron的环境路径下 建立mysql的软链,这样定时任务就可以正常执行mysql命令了。
- 找到mysql安装路径
[root@iZ bin]#which mysql
/application/mysql/bin/mysql
- 建立软连接
[root@iZ /]# cd /usr/bin
[root@iZ bin]# ln -fs /application/mysql/bin/mysql mysql
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入技术爱好者交流群373107565,我们一起学技术!

网友评论