我的查询shell脚本速度慢,如下所示:
scp kill_slow_queries.sh root@$db:/root/
ssh -t -t -o StrictHostKeyChecking=no root@$db "grep -q -F '#Chef Name: kill_slow_queries' /var/spool/cron/crontabs/root || echo '#Chef Name: kill_slow_queries' >> /var/spool/cron/crontabs/root"
ssh -t -t -o StrictHostKeyChecking=no root@$db "grep -q -F '* * * * * cd /root && sh kill_slow_queries.sh >> killed_queries.log' /var/spool/cron/crontabs/root || echo ' * * * * * cd /root && sh kill_slow_queries.sh >> killed_queries.log' >> /var/spool/cron/crontabs/root"
ssh -t -t -o StrictHostKeyChecking=no root@$db "grep -q -F '* * * * * ( sleep 15 ; cd /root && sh kill_slow_queries.sh >> killed_queries.log )' /var/spool/cron/crontabs/root || echo ' * * * * * ( sleep 15 ; cd /root && sh kill_slow_queries.sh >> killed_queries.log )' >> /var/spool/cron/crontabs/root"
ssh -t -t -o StrictHostKeyChecking=no root@$db "grep -q -F '* * * * * ( sleep 30 ; cd /root && sh kill_slow_queries.sh >> killed_queries.log )' /var/spool/cron/crontabs/root || echo ' * * * * * ( sleep 30 ; cd /root && sh kill_slow_queries.sh >> killed_queries.log )' >> /var/spool/cron/crontabs/root"
ssh -t -t -o StrictHostKeyChecking=no root@$db "grep -q -F '* * * * * ( sleep 45 ; cd /root && sh kill_slow_queries.sh >> killed_queries.log )' /var/spool/cron/crontabs/root || echo ' * * * * * ( sleep 45 ; cd /root && sh kill_slow_queries.sh >> killed_queries.log )' >> /var/spool/cron/crontabs/root"
对于上面的shell脚本,查询将每隔15分钟运行一次。但我需要帮助,
如果在2.15PM中运行slow_query来查杀。但是这个任务再次运行2.30PM再次任务开始杀死slow_query任务而没有完成第一个任务。
如果第一个任务开始运行并完成任务,我需要帮助。我们想再次开始第二项任务。如果没有完成第一个任务,则不会再开始第二个时间间隔。
如果他们有任何方法。请告诉我....
答案 0 :(得分:0)
我的解决方案避免使用crontab。它创建了一个shell守护进程。
daemon.sh:
#!/bin/ksh
#every 15 min
_DELAY=900
rm -f "${_FICSTOP}" 2>&1
if [ ${?} -ne 0 ]
then
echo "$(date +%Y%m%d-%H%M%S) FATAL : unable to delete stop file."
return 1
fi
## star main loop
echo "$(date +%Y%m%d-%H%M%S) : star daemon OK."
while [ 1 ]
do
if [ -f "${_FICSTOP}" ]
then
echo "$(date +%Y%m%d-%H%M%S) : stop file found; stopping daemon..."
break
fi
#do what you need
sleep 15 ; cd /root && sh kill_slow_queries.sh >> killed_queries.log
sleep 15 ; cd /root && sh kill_slow_queries.sh >> killed_queries.log
sleep 15 ; cd /root && sh kill_slow_queries.sh >> killed_queries.log
echo " $(date +%Y%m%d-%H%M%S) : sleeping for ${_DELAY} seconds..."
sleep ${_DELAY}
done
return 0
然后调用它:
export _FICSTOP=/root/stop.file ; nohup sh daemon.sh &
然后停止守护进程,你做了
touch /root/stop.file