Linux_时间调度和时间变量

调度方式

定时调度:
    一次性调度
	周期性调度:Cron表达式,用于配置Job如何周期性运行
依赖调度:
      依赖条件  依赖策略
手动调度

调度器: Quartz	

Linux调度-调度功能

文件位置
   /etc/crontab
   /etc/cron.d/*
   /var/spool/cron/*
类型
    system-wide crontab: cat /etc/crontab
     user       crontab: crontab -e
日志
    #ls /var/log/cron*
sudo cat /var/log/cron | grep docker	
服务管理
  systemctl status  cron  (Ubuntu)
  systemctl status  crond (Centos)

Crontab表达式

当程序在你所指定的时间执行后,系统会发一封邮件给当前的用户,显示该程序执行的内容,
若是你不希望收到这样的邮件,请在每一行空一格之后加上 > /dev/null 2>&1 即可,	 	 
 
	* * * * * docker container prune --filter "until=72h" -f  > /dev/null 2>&1 
    * * * * * docker image prune -f  > /dev/null 2>&1 
	
	
第1列分钟1~59 第2列小时1~23(0表示子夜) 第3列日1~31 第4列月1~12 第5列星期0~6(0表示星期天)
Seconds Minutes  Hours Day-of-Month  Month  Day-of-Week
第6列要运行的命令	
*代表所有的取值范围内的数字,"/"代表每的意思,"/2"表示每2个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。
cron 是没有状态的,它不能够记录上次执行的是什么时间,只能根据当前的时间来判断是否需要执行
能够被整除的步长值才能表达与我们理解相一致确切的含义,
   对于分钟来说只有 */2,*/3,*/4,*/5,*/6,*/10,*/12,*/15,*/30,
   对于小时来说则只有*/2,*/3,*/4,*/6,*/8,*/12。
   对于日期来说,如果使用*/5,则不能保证每5天执行一次,到月底的时候可能只执行1天、2天或3天后就停止了,这取决与大小月与平闰年

--在日志/var/log/cron里面,你可以看到定时任务的相关日志,然后就知道了这个作业的真实Schedule
  每隔3天的9点执行
   0 9 */3 * * docker container prune --filter "until=72h" -f  > /dev/null 2>&1 
   
   
因为第三位的*/3等同于1-31/3, crontab的天是相对于一个月来说的   
也就是每个月第一天执行一次,然后第四天执行一次,第七天执行一次...以此类推
这样的话 对于每一个月来说,执行周期都是 1,4,7,10,13,16,19,22,25,28,31   

 /etc/crontab 编辑文件--语法	
 crontab -e这种所有用户都可以使用,普通用户也只能为自己设置计划任务
 /etc/crontab这种方法只有root用户能用,这种方法更加方便与直接直接给其他用户设置计划任务,而且还可以指定执行shell等等,
 /etc/crontab是系统的周期任务  /etc/crontab是个纯文本文件,可以root的身份编辑这个文件
 分 时 日 月 周   用户   参数设定值   参数设定值   指令段

时间使用方式

将时间组合--赋值变量--变量替换相应的时间
脚本定时执行

Linux 中命令-date

1. 语法: date(选项)(参数)  date 是指 linux 下的 GNU date  
GNU date 的日期加减运算是支持自然语言的
-d 主要有三种指令:last/next指令  ago指令  负数指令
  today=$(date +%Y-%m-%d)
  yest=$(date -d "last-day $today" +%Y-%m-%d)
  week=$(date -d"$yest-$((`date -d $yest +%u`-1)) days" +%Y-%m-%d)
  today_s=$(date -d $today +%s000)
  yest_s=$(date -d $yest  +%s000)
  week_s=$(date -d $week  +%s000)
01.时间变动
    yest_s=$(date -d $yest  +%s000)
02.时间戳变动-可以得到过去的日期:
    yest_s=$(date -d "1 hour ago $yest"  +%s000)
    yest_s=$(date -d "-1 hour ago $yest"  +%s000)
03.前后顺序 以及 横杠加不加
    yest_s=$(date -d "last hour $yest"  +%s000)
    yest_s=$(date -d "last-hour $yest"  +%s000)
    yest_s=$(date -d "next hour $yest"  +%s000)
    yest_s=$(date -d "next-hour $yest"  +%s000)
    yest_s=$(date -d "$yest last hour " +%s000)
2.时间格式变换
    从时间戳变为日期格式
        date -d  @0            //当时间戳为0的时候,可以看到时间为 1970年08:00:00
        date -d '@1498863660'
        date -d '@1498863660' +%Y-%m-%d
        date -d  @1498863660   +"%Y-%m-%d %H:%M:%S"
    从时间戳变为日期
        shell将时间字符串与时间戳互转--+%s表示输出时间戳
        date -d "$( date "+%Y-%m-%d %H:%M:%S")" +%s
        date -d last-day +%s
        date -d '2017-07-01 22:14' +%s
    日期格式变换
        date -d "2017-07-01" +"%Y/%m/%d %H:%M:%S"                   
3.今天日期--注意中间有空格
     #对应昨天日期
         date -d   last-day    +%Y-%m-%d
         date -d  'last day'   +%Y-%m-%d
     #对应周的周一
         date -d  'last monday' +"%Y-%m-%d"
         #下周周一
         date -d  'next monday' +"%Y-%m-%d"
         date -d "last sunday" +"%Y%m%d
         date +%w   #获得当天是星期几 
     #今天本日期对应的月初日期   
         date +%Y%m01
         date +%Y-%m-01
     #今天对应的上个月月初
         date -d '1 month ago' +%Y%m01
     #本月月初
         v_lm=`date +%Y%m01`
     #上个月月末
         v_lm_rq=`date -d "${v_lm} last day" +%Y%m%d`
         echo ${v_lm_rq}
 
 4.昨天-特定日期所对应的各个时间
                 date -d "yesterday" +%Y-%m-%d
                 yestD=`date -d "yesterday" +%Y%m%d`
                 echo ${yestD}               
     #昨天日期对应的月初日期
                 date -d '1 day  ago' +%Y-%m-01
     #昨天日期的周一
         #写法01.昨天日期
                 v_yesterday=`date -d "yesterday" +%Y%m%d`
                 #昨天日期对应的周一的日期
                 v_lm_week=`date -d "${v_yesterday} last monday" +%Y-%m-%d`
                 echo ${v_lm_week}
         #写法02.将当前日期赋值给DATE变量
                 DATEA=$(date  -d "yesterday" +%Y%m%d)
                 date -d "${DATEA} last monday" +%Y-%m-%d
         #写法03
             #date -d " $(date  -d "yesterday" +%Y%m%d)  last monday" +%Y-%m-%d

Internet时间同步服务器地址(NTP时间服务器)

 NTP服务器【Network Time Protocol(NTP)

时间同步

 授时功能和定位功能-->定位授时系统
 硬件上把时钟源统一	
      时钟源的累计误差--时间差 累计漂移	 
	  传感器的采集时刻-->索引和插值计算
	  考虑一些异常情况,传感器难免会有一些丢帧或者时间戳出问题的情况
  
 海量数据本身就有一种吸引力,更何况处理这些数据可以对社会和人民有帮助

参考

 从零开始做自动驾驶定位(六): 传感器时间同步 https://zhuanlan.zhihu.com/p/108853312	 
posted @ 2022-04-02 14:00  辰令  阅读(320)  评论(0编辑  收藏  举报