Linux_時間排程和時間變數
阿新 • • 發佈:2022-04-02
排程方式
定時排程:
一次性排程
週期性排程: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