shell中执行没有问题的脚本,交给cron后出错,如何解决?
来源:互联网 发布:逆战天梯怎么卡数据 编辑:程序博客网 时间:2024/05/16 10:34
最近有个需求,就是定时检查一个数据库表格中的条目,一旦条目增加及时报告给管理员来处理。于是,我想到了用一个脚本来实现数据的获取、比对、处理和邮件发送(139邮箱可以设置免费短信报警,很实用的功能)。
脚本如下:
#!/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`: 邮件发送失败,请检查" fielse 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的可执行文件的位置。
因此,脚本中使用的命令尽量使用绝对路径,防止出现不必要的麻烦。
阅读全文
1 0
- shell中执行没有问题的脚本,交给cron后出错,如何解决?
- 一个shell脚本执行出错的问题
- 解决在windows环境中编写shell脚本,在Linux运行出错的问题
- 解决cron不能启动脚本的问题
- 解决hbase 执行shell命令出错问题
- 解决cron不执行的问题
- 解决cron不执行的问题
- 解决cron不执行的问题
- linux中Cron执行shell的一个问题(子shell的调用方法)
- 【Mac】解决jenkins执行shell脚本等场景中遇见的权限不足问题
- 在linux中执行shell脚本,当前用户执行没有问题,设置为定时任务却报错
- 解决shell脚本文件执行时中文乱码的问题
- 通过sudo解决php执行shell脚本的权限问题
- 用cron定时执行shell脚本
- shell脚本直接执行没有问题,crontab定时执行失败的解决方法
- shell脚本直接执行没有问题,crontab定时执行失败的解决方法
- shell脚本直接执行没有问题,crontab定时执行失败的解决方法
- shell不能执行su 后的脚本
- 书的复制
- python编程基本方法之raw_input .format
- Android音视频开发进阶
- XZ_iOS之一串字符串每隔4个数字或者字符串加空格
- 计算几何-求线段交点算法和代码(C++语言)
- shell中执行没有问题的脚本,交给cron后出错,如何解决?
- 关于函数柯里化的一些理解
- 实现服务器和客户机的交互
- java连接sqlserver2016方法
- AS导入项目出现Error:Execution failed for task ':app:processDebugManifest'.错误
- 【c++基础】5.标识符、关键字、函数
- python基础内容
- GRASP设计模式
- Gradle使用基础