2022-03_shell 如何编写定时任务?

导读

crontab命令常见于Unix和Linux的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。通常,crontab储存的指令被守护进程激活。

1. crontab 使用步骤

(1)、编写定时任务需求脚本,如以下脚本 处理vertica ros to many 问题。

脚本需要在 vertica 需要放在vertica mpp 服务器执行。

ros_mergetout_task.sh 如下所示:

#!/bin/sh
#Author:lvtong Time:2022-03-29 19:00  Desc:vertica ros to many  question
#ros limit value
default_ros=800

#event mergeout task
function event_task(){
  ros=0
  ros=$(${vsql} -qtAX -c "select count(distinct storage_oid) from storage_containers where projection_name like ('event%') group by projection_name order by 1 desc limit 1")
  echo "$(date "+%Y%m%d%H%M%S"), event ros :$ros"
  if [[ ${ros} -ge ${default_ros} ]]; then
      echo "$(date "+%Y%m%d%H%M%S"),current event ros [$ros] larger than [$default_ros]"
      event_result=$(${vsql} -qtAX -c "select do_tm_task('mergeout','my.event')")
      echo "$(date "+%Y%m%d%H%M%S"),event mergeout end"
  fi
}

#mergeout task
event_task

(2) 执行 “crontab -e” 命令,添加你编写的定时任务,如该脚本为每30分钟执行一次脚本任务,echo 和错误输出到 /opt/vertica/ros_many_task.log 文件。

"*/30 * * * * bash /opt/vertica/bin/ros_mergeout_task.sh 
uname upwd &>>/opt/vertica/ros_many_task.log 2>&1"

2. crontab 注意事项

当程序在你所指定的时间执行后,系统会发一封邮件给当前的用户,内容在 /var/spool/mail/$user,显示该程序执行的内容,若是你不希望收到这样的邮件,请在每一行空一格之后加上 > /dev/null 2>&1 即可。

如标准输出/标准错误输出重定向到空设备文件,也就是不输出任何信息到终端。

#/dev/null 代表空设备文件
#1 表示stdout标准输出,默认值1
#2 表示stderr标准错误
#& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
*/5 * * * * /root/XXXX.sh &>/dev/null 2>&1

你可能感兴趣的:(个人开发经验集,shell)