1. 程式人生 > 其它 >Linux_時間排程和時間變數

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*
	
服務管理
  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   

時間使用方式

將時間組合--賦值變數--變數替換相應的時間
指令碼定時執行

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