linux中定时任务执行失败

问题来源:

最近发现数据库中有sleep进程无法关闭,并且阻塞时间过长,需要执行脚本,定时清除

 

解决方案:

原脚本文件:

 

#!/bin/sh

 

MYSQLTOOL=mysql

MYSQLUSER=root

MYSQLPASS=****

HOST=*****

PORT=3306

sleepid="SELECT ID FROM information_schema.PROCESSLIST t WHERE t.COMMAND='Sleep' and time >1200;"

$MYSQLTOOL -h$HOST -u$MYSQLUSER -p$MYSQLPASS -P$PORT -e "$sleepid" >sleepIDs

while read sID

do

if [ ${sID} != 'ID' ];then

echo ${sID}

$MYSQLTOOL -h$HOST -u$MYSQLUSER -p$MYSQLPASS -P$PORT -e "kill ${sID}"

fi

done<sleepIDs

 

定时任务(每个小时的第一分钟执行):

1 * * * * sh /app/mysql/clean_process/cleanmysql.sh

 

经过观察,发现脚本文件虽然执行,但是没有生效

 

修改定时任务执行,将允许过程记录下来

1 * * * * sh /app/mysql/clean_process/cleanmysql.sh >> /app/softlog/cron.log 2>&1

 

进入该目录下查看,发现报错

/app/mysql/clean_process/cleanmysql.sh: line 9: mysql: command not found

 

查看脚本,发现是因为执行mysql命令时失败了,mysql -h...这个命令无法识别

 

在命令行中直接执行mysql可以跳转到数据库,并且执行脚本成功,推测可能是在定时任务执行脚本时,无法直接使用mysql命令,需要带上mysql的全路径

 

在命令行中使用which mysql 查找mysql全路径,并替换到脚本中,任务成功执行

 

修改后脚本:

#!/bin/sh

 

MYSQLTOOL=/alidata/server/mysql/bin/mysql

MYSQLUSER=root

MYSQLPASS=****

HOST=*****

PORT=3306

sleepid="SELECT ID FROM information_schema.PROCESSLIST t WHERE t.COMMAND='Sleep' and time >1200;"

$MYSQLTOOL -h$HOST -u$MYSQLUSER -p$MYSQLPASS -P$PORT -e "$sleepid" >sleepIDs

while read sID

do

if [ ${sID} != 'ID' ];then

echo ${sID}

$MYSQLTOOL -h$HOST -u$MYSQLUSER -p$MYSQLPASS -P$PORT -e "kill ${sID}"

fi

done<sleepIDs

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值