crontab

来源:https://www.cnblogs.com/AkatsukiJun/archive/2019/07/12/11176055.html
-Advertisement-
Play Games

crontab 簡介 ​ crontab常見於Unix和類Unix的操作系統之中,用於設置周期性被執行的指令。編輯好的crontab會被存放於“crontab”文件中,以供之後讀取和執行。每個用戶可以擁有自己的crontab文件。通常,crontab存儲的指令被守護進程crond激活,crond常常 ...


crontab

簡介

​ crontab常見於Unix和類Unix的操作系統之中,用於設置周期性被執行的指令。編輯好的crontab會被存放於“crontab”文件中,以供之後讀取和執行。每個用戶可以擁有自己的crontab文件。通常,crontab存儲的指令被守護進程crond激活,crond常常在後臺運行,每分鐘檢查是否有預定的作業需要執行。

命令選項

(1) crontab -e : 修改crontab文件。如果文件不存在會自動創建
(2) crontab -l : 顯示crontab文件。
(3) crontab -r : 刪除crontab文件。
(4) crontab -ir : 刪除crontab文件前提醒用戶

語法

{minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script}

minute: 區間為0-59
hour: 區間為0-23
day-of-month: 區間為0-31
month: 區間為1-12,1是1月,12是12月
day-of-week: 區間為0-7,周日可以是0或7

示例:

(1)在每天00:01運行,即每天凌晨過一分鐘。

1 0 * * * /root/bin/hello.sh

(2)每個工作日(Mon - Fri)11:59PM運行

59 23 * * 1,2,3,4,5 /root/bin/hello.sh

(3)下麵例子與上面的例子效果一樣

59 23 * * 1-5 /root/bin/hello.sh

(4)每5分鐘運行一次

*/5 * * * * /root/bin/hello.sh

(5)每個月的第一天1:10pm運行

10 13 1 * * /root/bin/hello.sh

(6)每個工作日11:00pm運行

0 23 * * 1-5 /root/bin/hello.sh

關於crontab每小時運行一次

正確寫法:

*/60 * * * * /root/bin/hello.sh

以下均為錯誤寫法:

0 * * * * /root/bin/hello.sh # 每小時的0分運行。雖然也是每小時運行一次,但是如果我是在10:20創建crontab,應該在11:20運行,而不是11:00
0 */1 * * * /root/bin/hello.sh # 和上面一樣
* */1 * * * /root/bin/hello.sh # 更加錯誤的寫法,分鐘要求的是每分鐘執行,而小時卻要求每小時執行,最終以分鐘為準。因此每分鐘執行一次。

關於crontab每秒運行一次

​ 在簡介中有提到過,crond守護進程每分鐘檢查一次是否有預定的作業需要執行,因此crontab沒有辦法直接做到每秒運行一次,最少每分鐘運行一次。但是我們可以通過增加sleep語句來達到每秒執行的效果。

​ 以每30s執行一次為例:

* * * * * /root/bin/hello.sh
* * * * * sleep 30; /root/bin/hello.sh

​ 第二條crontab雖然與第一條同時被crond執行,但是需要延遲30s,通過延遲執行的方式達到了每30s執行一次的效果

​ 同理,每10s執行一次:

* * * * * /root/bin/hello.sh
* * * * * sleep 10; /root/bin/hello.sh
* * * * * sleep 20; /root/bin/hello.sh
* * * * * sleep 30; /root/bin/hello.sh
* * * * * sleep 40; /root/bin/hello.sh
* * * * * sleep 50; /root/bin/hello.sh

​ 如果要達到每秒執行一次,則需要添加60條crontab,這裡就不贅述,留給大家自己思考叭(◕‿◕✿)

對於crontab任務堆積的處理

​ crontab在執行的過程中,可能由於任務執行錯誤或者在下一個任務開始前,前一個任務沒有執行完成,導致大量的進程產生,最終可能導致死機等情況產生。

​ 之前做過一個告警外發的需求,要求實時的把最新告警給外發出去。這裡我用的就是crontab,但是由於sql查詢速度和網路延遲等情況,可能上一次的外發還沒有執行完,下一次的外發就開始了,導致有些告警被重覆外發。這裡就可以使用flock來解決這個問題。

​ flock的本質是給某個crontab加鎖,如果第二個進程發現這個crontab有鎖,就會放棄執行。

flock命令選項

flock [-sxon][-w #] file [-c] command

-s, --shared:       獲得一個共用鎖
-x, --exclusive:    獲得一個獨占鎖
-u, --unlock:       移除一個鎖,通常是不需要的,腳本執行完會自動丟棄鎖
-n, --nonblock:     如果沒有立即獲得鎖,直接失敗而不是等待
-w, --timeout:      如果沒有立即獲得鎖,等待指定時間
-o, --close:        在與逆行命令前關閉文件的描述符號,用於如果命令產生子進程時會不受鎖的管控
-c, --command       在shell中運行一個單獨的命令
-h, --help          顯示幫助
-V, --version       顯示版本

任務舉例:

# hello.lock為是一個鎖臨時文件
* * * * * flock -xn /root/bin/hello.lock -c '/root/bin/hello.sh'
* * * * * sleep 30; flock -xn /root/bin/hello.lock -c '/root/bin/hello.sh' 

好啦,關於crontab的使用方法就這些啦,如有補充,歡迎評論區留言(●'◡'●)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [toc] Linux硬體基礎 一、電腦的相關介紹 現在的人們幾乎無時無刻都在使用電腦!而且已經離不開電腦了。像桌上的台式電腦(桌機)、筆記本電腦(筆電)、平板電腦、智能手機等等,這些東西都算是電腦。 台式機 電腦 台式機電腦主要分為主機和顯示器兩個部分,一般用於家庭娛樂、日常辦公,例如:聽音樂、 ...
  • [toc] yum工具及源碼包 yum 是RedHat以及CentOS中的軟體包管理器,能夠通過互聯網下載以rpm結尾的包,並且安裝,並可以自動處理依賴性關係,無需繁瑣的一次次下載安裝。 yum源 要成功的使用yum工具安裝更新軟體或系統,就需要有一個包含各種rpm軟體包的repository(軟體 ...
  • Linux 操作系統及其組成 操作系統(OS)是管理電腦硬體與軟體資源的電腦程式,同時也是電腦系統的內核與基石。操作系統需要處理如管理與配置記憶體、決定系統資源供需的優先次序、控制輸入設備與輸出設備、操作網路與管理文件系統等基本事務。操作系統也提供一個讓用戶與系統交互的操作界面。 一個典型的Li ...
  • 本文主要瞭解了Linux系統中的Shell,以及什麼是BATH。 ...
  • 普通文件類型 (-)Linux中最多的一種文件類型, 包括 純文本文件(ASCII);二進位文件(binary);數據格式的文件(data);各種壓縮文件.第一個屬性為 [-] ,這些文件一般是用一些相關的應用程式創建,比如圖像工具、文檔工具、歸檔工具... .... 或 cp工具等。這類文件的刪除 ...
  • [toc] linux軟體管理 RPM RPM的基礎概述 rpm:RPM全稱 縮寫,由紅帽開發用於軟體包的安裝,升級卸載與查詢 rpm包的命名規則 name: 軟體包名稱 version: 版本號, 主版本, 重大更新. 次版本, 子功能更新. 修訂號, 修複bug release: 發佈版本 el ...
  • [toc] 純凈版虛擬機 1. 先安裝個虛擬機,登陸nginx官網 http://nginx.org/選擇一個穩定的版本 2. 右鍵複製地址,到新克隆的純凈虛擬機wget 下載 先yum install y wget 把源換成阿裡雲的 curl o /etc/yum.repos.d/CentOS B ...
  • Linux目錄和文件——查詢目錄和文件的命令 摘要:本文主要學習了在Linux系統中是如何查詢目錄和文件的。 which命令 which命令是根據PATH環境變數設置的路徑,去搜索執行文件。 基本語法 選項說明 使用舉例 type命令 type命令用來顯示指定命令的類型: 1)alias:別名。 2 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...