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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...