shell中执行没有问题的脚本,交给cron后出错,如何解决?
2017-06-08 16:16
531 查看
最近有个需求,就是定时检查一个数据库表格中的条目,一旦条目增加及时报告给管理员来处理。于是,我想到了用一个脚本来实现数据的获取、比对、处理和邮件发送(139邮箱可以设置免费短信报警,很实用的功能)。
脚本如下:
注释:
在/home/lius/management/massage.txt 中,是发送给139邮箱的正文信息,直接读取用mail命令来发送;
/home/lius/kid.txt 中,是上一次获取到的数据库条目数字,默认数据库表中有id字段;
crontab任务:
每一小时执行一遍脚本,错误和正确的输出信息都记录日志。
出现的问题:
一开始的时候,脚本中没有:
而是直接用mysql来运行的。
cron任务中也是用绝对路径来执行的:
开始脚本在shell中运行没有出现问题,在cron任务设定以后,每次执行都有问题。
网上有帖子说是权限问题,因此按照他的建议改为了:
然而问题依然存在,是和mysql相关的错误提示。于是,将脚本中的mysql改成了绝对路径:
然后用$mysql来引用,果然问题就解决了。
估计的原因是cron后台进程无法在PATH中找到mysql的可执行文件的位置。
因此,脚本中使用的命令尽量使用绝对路径,防止出现不必要的麻烦。
脚本如下:
#!/bin/bash # 脚本:获取数据库表中的条目数,一旦增加邮件报警。 mysql=/usr/local/mysql/bin/mysql # 取到id段的内容 a=`$mysql -e "SELECT id FROM db_lius.tb_lius;"` # 过滤得到id段的最后一个值,(id有自动加1的机制,最后的肯定是更大的数字) b=`echo $a | awk '{print $NF}'` # 获取到以前的id字段的最后一个值 c=`cat /home/lius/kid.txt` if [ $b -ne $c ]; then echo $b >| /home/lius/kid.txt cat /home/lius/management/massage.txt | mail -s "有新的条目更新" 13535353535@139.com if [ `echo $?` -eq 0 ]; then echo "`date +%F\ %H:%M:%S`:执行成功" else echo "`date +%F\ %H:%M:%S`: 邮件发送失败,请检查" fi else echo "`date +%F\ %H:%M:%S`: 无条目更新,略过。。。" fi
注释:
在/home/lius/management/massage.txt 中,是发送给139邮箱的正文信息,直接读取用mail命令来发送;
/home/lius/kid.txt 中,是上一次获取到的数据库条目数字,默认数据库表中有id字段;
crontab任务:
1 * * * * cd /home/lius/management && ./lius.sh 2>> /home/lius/management/kid.cron.err 1>> /home/lius/management/kid.cron.log
每一小时执行一遍脚本,错误和正确的输出信息都记录日志。
出现的问题:
一开始的时候,脚本中没有:
mysql=/usr/local/mysql/bin/mysql
而是直接用mysql来运行的。
cron任务中也是用绝对路径来执行的:
1 * * * * /home/lius/management/lius.sh 2>> /home/lius/management/kid.cron.err 1>> /home/lius/management/kid.cron.log
开始脚本在shell中运行没有出现问题,在cron任务设定以后,每次执行都有问题。
网上有帖子说是权限问题,因此按照他的建议改为了:
cd /home/lius/management && ./lius.sh
然而问题依然存在,是和mysql相关的错误提示。于是,将脚本中的mysql改成了绝对路径:
mysql=/usr/local/mysql/bin/mysql
然后用$mysql来引用,果然问题就解决了。
估计的原因是cron后台进程无法在PATH中找到mysql的可执行文件的位置。
因此,脚本中使用的命令尽量使用绝对路径,防止出现不必要的麻烦。
相关文章推荐
- windows下写的shell脚本在linux执行出错的解决办法
- windows下写的shell脚本在linux执行出错的解决办法
- 【Linux】执行shell脚本出现异常:bad interpreter: No such file or directory如何解决
- shell脚本直接执行没有问题,crontab定时执行失败的解决方法
- windows下写的shell脚本在linux执行出错的解决办法
- shell脚本直接执行没有问题,crontab定时执行失败的解决方法
- shell脚本直接执行没有问题,crontab定时执行失败的解决方法
- shell脚本直接执行没有问题,crontab定时执行失败的解决方法
- windows下写的shell脚本在linux执行出错的解决办法
- 执行shell脚本出现异常:bad interpreter: No such file or directory如何解决
- BAT脚本如何自动执行 adb shell 以后的命令
- 手记06之shell如何执行脚本
- Linux系列教程(二十)——Linux的shell概述以及如何执行脚本
- 如何获得 sh 或 source 执行的shell 脚本位置
- BAT脚本如何自动执行 adb shell 以后的命令
- shell脚本手动执行成功,定时任务调用失败的解决方法。
- 执行shell脚本时提示bad interpreter:No such file or directory的解决办法
- centos下,单引号括起来的shell脚本不执行解决方法
- Linux下,将python安装在个人目录下,配置环境变量,以及解决crontab执行python脚本会出错的问题
- 如何在 Shell 脚本中跟踪调试命令的执行