Linux中的計劃任務(crontab)詳解

🐇明明跟你說過:個人主頁

🏅個人專欄:《Linux :從菜鳥到飛鳥的逆襲》🏅

🔖行路有良友,便是天堂🔖

目錄

一、前言

1、Linux的起源與發展

2、什么是計劃任務(crontab)?

二、crontab基礎?

1、crontab的工作原理

2、crontab的組成部分(時間字段、命令字段)

3、查看、編輯和刪除crontab任務的方法?

三、crontab時間表達式?

1、時間表達式的格式

2、時間字段的詳細解釋(分鐘、小時、日期、月份、星期)?

四、編寫和管理crontab任務?

1、編寫基本的crontab任務

2、使用腳本文件執行復雜任務?


一、前言

1、Linux的起源與發展


1991年,芬蘭赫爾辛基大學的學生林納斯·托瓦茲(Linus Torvalds)開始編寫一個新的操作系統內核,這個內核最初被稱為“Freax”。他的初衷只是想學習操作系統內核的開發,并為自己的個人計算機編寫一個操作系統。然而,當他將這個內核發布在Internet上并開放源代碼后,全球各地的程序員開始參與到這個項目中來,共同完善這個內核。最終,這個內核被命名為Linux,這個名字是由Linus Torvalds的名字和Unix操作系統的名字組合而成的。

Linux從一開始就堅持源代碼的公開和免費使用,任何人都可以對其進行修改和分發。這種開放性和自由性吸引了大量的開發者和用戶,使得Linux逐漸成長并成熟起來。如今,Linux已經發展成為一個性能穩定、功能強大的多用戶網絡操作系統,支持32位和64位硬件,能運行主要的Unix工具軟件、應用程序和網絡協議。同時,Linux也有上百種不同的發行版,如基于社區開發的Debian、ArchLinux,以及基于商業開發的Red Hat Enterprise Linux、SUSE、Oracle Linux等。

2、什么是計劃任務(crontab)?

計劃任務(crontab)是指在Linux系統中,利用cron(crond)這個系統服務來控制的定時執行工具,它允許用戶創建和管理計劃任務,以便在特定的時間間隔或時間點自動運行命令或腳本。

Crontab是cron table的縮寫,其中cron是Unix系統中的一個后臺進程,用于執行預定的任務。Crontab文件包含一系列計劃任務條目,每個條目都定義了一個任務的執行時間和要運行的命令或腳本。這些任務可以按照分鐘、小時、日、月和星期等不同的時間單位進行安排。

?

二、crontab基礎?

1、crontab的工作原理

crontab 的工作原理主要基于系統中的 cron 守護進程。當用戶創建或編輯 crontab 文件并保存后,cron 守護進程會定期檢查 crontab 文件的內容,并根據其中定義的任務調度規則執行相應的命令或腳本。

具體來說,crontab 的工作原理可以分為以下幾個步驟:

  1. 定時任務調度規則定義:用戶通過編輯 crontab 文件來定義需要定時執行的任務以及執行的時間規則。每個定時任務都有一個時間規則,指定了任務應該在何時執行,以及執行的頻率。
  2. cron 守護進程檢查:cron 守護進程會定期檢查系統中所有用戶的 crontab 文件,并根據其中定義的任務調度規則來決定是否執行相應的任務。默認情況下,cron 守護進程每分鐘都會檢查一次 crontab 文件。
  3. 任務執行:當到達任務指定的執行時間時,cron 守護進程會啟動一個新的 shell 進程,并在其中執行相應的命令或腳本。這些命令或腳本可以是任意的可執行文件,甚至是系統命令、系統腳本或用戶自定義的腳本。
  4. 輸出和日志記錄:任務執行完成后,cron 守護進程會將任務的輸出發送到指定的郵箱(如果有設置的話),并將任務的執行情況記錄到系統日志文件中,以供用戶查看和分析。
  5. 循環檢查:cron 守護進程會一直運行在后臺,并循環執行上述步驟,定期檢查 crontab 文件并執行相應的任務,直到系統關閉或 cron 服務停止運行。

?

crontab 的工作原理是基于系統中的 cron 守護進程定期檢查 crontab 文件,并根據其中定義的任務調度規則執行相應的任務。通過這種方式,用戶可以方便地設置和管理系統中的定時任務,實現自動化的任務調度和執行。

?

2、crontab的組成部分(時間字段、命令字段)

1. 時間字段:

  • 時間字段由五個部分組成,每個部分用空格分隔。這五個部分分別表示分鐘(0-59)、小時(0-23)、日期(1-31)、月份(1-12)和星期(0-7,其中0和7都表示星期日)。
  • 在時間字段中,可以使用一些特殊字符來定義任務的執行時間。例如,星號(*)表示匹配所有可能的值,逗號(,)用于指定多個值,連字符(-)用于指定一個范圍,斜杠(/)用于指定一個步長(即執行頻率)。

2. 命令字段:

  • 命令字段是crontab中用于指定要執行的命令或腳本的部分。它位于時間字段之后,與時間字段之間用空格分隔。
  • 在命令字段中,可以指定任何有效的shell命令或腳本路徑。當crontab根據時間字段確定需要執行任務時,它會啟動一個新的shell進程來執行該命令或腳本。

?

3、查看、編輯和刪除crontab任務的方法?

在 Linux系統中,我們可以使用以下命令來查看、編輯和刪除 crontab 任務:

1. 查看 crontab 任務:

  • 使用 crontab -l 命令可以查看當前用戶的 crontab 任務列表。執行該命令后,系統會將當前用戶的所有定時任務列出來,并顯示其具體的執行時間規則和要執行的命令或腳本。


2. 編輯 crontab 任務:

  • 使用 crontab -e 命令可以編輯當前用戶的 crontab 任務列表。執行該命令后,系統會打開一個文本編輯器,用戶可以在其中編輯定時任務的時間規則和要執行的命令或腳本。編輯完成后保存并退出編輯器即可,系統會自動更新 crontab 文件。


3. 刪除 crontab 任務:

  • 使用 crontab -r 命令可以刪除當前用戶的所有 crontab 任務。執行該命令后,系統會提示用戶確認是否刪除所有定時任務,確認后系統會將當前用戶的 crontab 文件清空,即刪除所有定時任務。


這些命令對當前用戶的 crontab 文件進行操作,需要注意的是,編輯 crontab 文件時需要有相應的編輯器權限。通常情況下,這些命令需要在終端中使用,用戶可以直接在命令行中輸入以上命令并按回車鍵執行。

三、crontab時間表達式?

1、時間表達式的格式

crontab 時間表達式的格式由五個字段組成,每個字段表示一個時間單位,分別是分鐘、小時、日期、月份和星期幾。

這些字段之間用空格或制表符分隔,總共有五個字段,每個字段的取值范圍和特殊字符如下:

  • 分鐘 (0-59):表示每小時的第幾分鐘執行任務。
  • 小時 (0-23):表示一天中的第幾個小時執行任務。
  • 日期 (1-31):表示一個月中的第幾天執行任務。
  • 月份 (1-12):表示一年中的第幾個月執行任務。
  • 星期 (0-7):表示一周中的第幾天執行任務,其中 0 和 7 都代表星期日。

?

除了上述的數值范圍外,還可以使用特殊字符來表示一些特殊的時間點,如下:

  • *:表示所有可能的值,表示在所有時間點都執行任務。
  • ,:用于分隔多個值,表示多個時間點執行任務。
  • -:用于指定一個范圍內的連續值,表示一個范圍內的時間點執行任務。
  • /:用于指定一個步長,表示每隔一定時間執行任務。

?

例如,下面是一些常見的 crontab 時間表達式示例:

  • 0 3 * * *:表示每天凌晨 3 點執行任務。
  • 30 7 * * *:表示每天早上 7 點 30 分執行任務。
  • 0 0 1 * *:表示每個月的第一天凌晨 0 點執行任務。
  • 0 0 * * 1:表示每周一凌晨 0 點執行任務。
  • */5 * * * *:表示每隔 5 分鐘執行任務。

?

2、時間字段的詳細解釋(分鐘、小時、日期、月份、星期)?

分鐘(Minute):

  • 含義:表示每小時中的哪一分鐘執行任務。
  • 取值范圍:0到59。
  • 示例:如果設置為10,則任務將在每小時的第10分鐘執行。


小時(Hour):

  • 含義:表示一天中的哪個小時執行任務。
  • 取值范圍:0到23。其中,0表示午夜,23表示晚上11點。
  • 示例:如果設置為8,則任務將在每天的上午8點執行。


日期(Day of the month):

  • 含義:表示一個月中的哪一天執行任務。
  • 取值范圍:1到31。
  • 示例:如果設置為15,則任務將在每月的第15天執行。
  • 注意:日期和星期字段是互斥的,即如果日期字段被指定了具體的值,那么星期字段通常應該設置為*(表示每天),或者留空。


月份(Month):

  • 含義:表示一年中的哪個月執行任務。
  • 取值范圍:1到12。也可以使用縮寫的月份名稱,如Jan、Feb、Mar等。
  • 示例:如果設置為6,則任務將在每年的6月執行。


星期(Day of the week):

  • 含義:表示一周中的哪一天執行任務。
  • 取值范圍:0到7,其中0和7都表示星期日,1表示星期一,依此類推。也可以使用縮寫的星期名稱,如Sun、Mon、Tue等。
  • 示例:如果設置為1,則任務將在每周的星期一執行。
  • 注意:星期和日期字段是互斥的,即如果星期字段被指定了具體的值,那么日期字段通常應該設置為*(表示每天),或者留空。

???

四、編寫和管理crontab任務?

1、編寫基本的crontab任務

當編寫基本的 crontab 任務時,需要確定任務的執行時間規則和要執行的命令或腳本。

假設我們要設置一個每天凌晨 3 點執行備份數據庫的任務,執行的命令是 /usr/bin/backup.sh。

編輯 crontab 文件:
使用 crontab -e 命令編輯當前用戶的 crontab 文件。

添加任務:
在編輯器中添加以下內容:

0 3 * * * /usr/bin/backup.sh


這行內容表示在每天凌晨 3 點執行 /usr/bin/backup.sh 腳本。

保存并退出編輯器:
根據編輯器的操作提示,保存并退出編輯器。

任務添加完成后,crontab 將會自動根據設定的時間規則執行相應的命令或腳本。在這個示例中,每天凌晨 3 點會執行備份數據庫的腳本 /usr/bin/backup.sh。

??

2、使用腳本文件執行復雜任務?

當需要執行復雜的定時任務時,通常的做法是將這些任務封裝到一個腳本文件中,然后在crontab中調用這個腳本文件。這樣可以使任務管理更加清晰和可維護。

以下是如何使用腳本文件執行復雜任務的步驟:

1. 編寫腳本文件
首先,需要使用腳本語言(如Bash、Python、Perl等)編寫一個腳本文件,該文件將包含要執行的復雜任務。

例如,假設有一個Bash腳本文件complex_task.sh,內容如下:

#!/bin/bash ?# 這是一個示例腳本,用于執行復雜任務 ?# 切換到工作目錄 ?
cd /path/to/working/directory ?# 執行一些命令或操作 ?
echo "開始執行復雜任務..." ?
# 這里可以添加你的復雜任務邏輯,比如循環、條件判斷、調用其他命令等 ?
# ... ?# 假設這里有一些輸出或日志記錄 ?
echo "任務執行完畢,結果如下:" ?
# ...(輸出或記錄結果) ?# 如果需要,還可以發送通知或郵件 ?
# ...


確保腳本文件的第一行是正確的shebang(#!/bin/bash或其他使用的解釋器的路徑),并且文件具有執行權限(可以通過chmod +x complex_task.sh命令添加執行權限)。

2. 在crontab中調用腳本文件


接下來,需要在crontab中設置一個任務來調用這個腳本文件。打開crontab編輯器:

crontab -e


然后添加一行來調用腳本文件,例如:

# 每天中午12點執行complex_task.sh腳本 ?
0 12 * * * /path/to/complex_task.sh


確保提供了腳本文件的完整路徑。保存并關閉編輯器后,cron守護進程將自動加載crontab文件并安排任務。

?💕💕💕每一次的分享都是一次成長的旅程,感謝您的陪伴和關注。希望這些關于Linux的文章能陪伴您走過技術的一段旅程,共同見證成長和進步!😺😺😺

🧨🧨🧨讓我們一起在技術的海洋中探索前行,共同書寫美好的未來!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/13776.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13776.shtml
英文地址,請注明出處:http://en.pswp.cn/web/13776.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

超詳細的前后端實戰項目(Spring系列加上vue3)(一步步實現+源碼)前端篇(一)

最近想著一步步搭建一個前后端項目,將每一步詳細的做出來。(如果有不足或者建議,也希望大佬們指出哦) 前端初始化 1.根據vue腳手架創建vue項目 這里可以用很多方法創建vue項目,大家看著創建吧,只要能創建…

k8s 部署mqtt簡介

在Kubernetes(K8s)中部署MQTT(Message Queuing Telemetry Transport)服務通常涉及以下幾個步驟: 選擇MQTT Broker MQTT Broker是MQTT消息傳遞的中間件。流行的MQTT Broker包括Mosquitto, HiveMQ, EMQ X等。你需要選擇一…

機器學習面試問題總結 | 貝葉斯網絡

本文給大家帶來的百面算法工程師是機器學習中貝葉斯網路面試總結,文章內總結了常見的提問問題,旨在為廣大學子模擬出更貼合實際的面試問答場景。在這篇文章中,我們還將介紹一些常見的面試問題,并提供參考的回答及其理論基礎&#…

K8S Secret管理之SealedSecrets

1 關于K8S Secret 我們通常將應用程序使用的密碼、API密鑰保存在K8S Secret中,然后應用去引用。對于這些敏感信息,安全性是至關重要的,而傳統的存儲方式可能會導致密鑰在存儲、傳輸或使用過程中受到威脅,例如在git中明文存儲密碼…

FreeRTOS_事件組_學習筆記

事件組 原文鏈接 事件組是一個整數,其中的高8位留給內核,只能用其他位來表示時間 每一位代表一個事件,且每個時間的含義由程序員決定 1為發生,0為未發生 一個/多個任務或ISR都能讀寫這些位 可以等待某一位,也可以等待…

如何理解合約中的引用類型(3)——Mapping

映射(mapping) 聲明形式:mapping(key type > value type)keytype可以是除枚舉外的幾乎任何基本類型,包括bytes和string,不包括用戶自定義的復雜類型-合約,枚舉,結構,映射value t…

簡單美觀易上手的 Docker Compose 可視化管理器 Dockge

本文首發于只抄博客,歡迎點擊原文鏈接了解更多內容。 前言 Dockge 是 Uptime Kuma 作者的新作品,因此 UI 風格與 Uptime Kuma 基本一致,如果你正在使用 Uptime Kuma 的話,那么 Dockge 的 UI 設計應該也不會讓你失望。Dockge 主打…

智慧校園為高校帶來哪些價值

在21世紀的教育圖景中,"智慧"不再僅僅是一個科技名詞,它已成為衡量教育現代化水平的重要標志。智慧校園,這一融合了物聯網、大數據、云計算等先進技術的教育新形態,正逐步成為高校轉型升級的關鍵驅動力。本文將從多個維…

note-網絡是怎樣連接的2 協議棧和網卡

助記提要 協議棧的結構協議棧創建連接的實際過程協議棧發送數據包的2個判斷依據TCP確認數據收到的原理斷開連接的過程路由表和ARPMAC地址的分配MAC模塊的工作通過電信號讀取數據的原理網卡和協議棧接收包的過程ICMPUDP協議的適用場景 2章 用電信號傳輸TCP/IP數據 探索協議棧和…

BUUCTF靶場 [reverse]easyre、reverse1、reverse2

工具: DIE:下載:https://download.csdn.net/download/m0_73981089/89334360 IDA:下載:https://hex-rays.com/ida-free/ 新手小白勇闖逆向區!!! [reverse]easyre 首先查殼&#xf…

如何理解HTML語義化

如何理解HTML語義化 HTML語義化,簡單來說,就是使用HTML標簽來清晰地表達頁面內容的結構和意義,而不僅僅是作為布局的容器。它強調使用具有明確含義的HTML標簽來描述頁面元素,而不是僅僅依賴CSS來實現頁面的外觀和布局。 理解HTM…

android 權限相關定義解釋

1 PID :程序一運行系統就會自動分配給進程一個獨一無二的PID,內部線程可以共享 該pid的分配的內存數據 2 UID:User Identifier,UID在linux中就是用戶的ID,表明時哪個用戶運行了這個程序,主要用于權限的管理。內部共享各…

【oracle003】圖片轉為字節、base64編碼等形式批量插入oracle數據庫并查詢

1.熟悉、梳理、總結下Oracle相關知識體系 2.歡迎批評指正,跪謝一鍵三連! 資源下載: oci.dll、oraocci11.dll、oraociei11.dll3個資源文件資源下載: Instant Client Setup.exe資源下載: oci.dll、oraocci11.dll、oraoc…

Vue ref訪問這些元素或組件的實例

可以在任意DOM元素上使用ref屬性&#xff0c;然后在Vue實例中通過this.$refs訪問這個DOM元素 1.訪問子組件實例&#xff0c;可以調用方法或者獲取值 <template><div><input type"text" ref"myInput" /><button click"focusInp…

ubuntu手動替換源后,更新源時提示“倉庫.... jammy Release“ 沒有Release文件

問題如圖所示&#xff0c;由于問題不好定位&#xff0c;我就從替換源&#xff0c;以及解決錯誤提示這兩個步驟&#xff0c;來解決其中可能存在的問題。 1、替換源 這一步驟&#xff0c;網上的資料可以搜到很多&#xff0c;我跟著做了之后&#xff0c;總會冒出來各種各樣的小問…

皮影戲藝術品3D沉浸式展館提供非同一般的趣味體驗

引領藝術展示的未來&#xff0c;深圳華銳視點融合多年的web3d項目制作經驗&#xff0c;傾力打造3D虛擬藝術品展館在線編輯平臺&#xff0c;為您提供一個超越時空限制的線上藝術展示平臺。 一、極致視覺盛宴 我們擁有領先的美術團隊&#xff0c;運用先進的web3D開發技術&#xf…

可能是最適合PS的AI插件,設計師大救星!StartAI初體驗!不是恰飯

這款軟件雖然有一些功能需要完善&#xff0c;比如&#xff1a; 1&#xff1a;生成圖片產品海報&#xff0c;會出現圖隨意出現&#xff0c;跟設計圖起沖突&#xff0c;需要PS才可以正常使用它。 2&#xff1a;即使開會員也需要排隊生成。 3: 還有&#xff0c;會員沒有更加好用的…

vue3結合element-plus之如何優雅的使用表單組件

背景 在日常開發中,我們會經常使用 element-ui 或者是 antdesign 或者是 element-plus 等組件庫實現搜索功能 這里就需要用到相關表單組件 下面就以 element-plus 為例,我們實現一個搜索功能的組件,并且隨著屏幕尺寸的變化,其布局也會跟隨變化 最終大致效果如下: 這里…

詳解VLSM技術

在現代網絡設計中&#xff0c;如何高效地分配和管理IP地址是一個關鍵問題。傳統的子網劃分方法雖然簡單&#xff0c;但在實際應用中常常導致IP地址的浪費。為了應對這一問題&#xff0c;VLSM&#xff08;Variable Length Subnet Mask&#xff0c;可變長子網掩碼&#xff09;技術…

C++:set和map的底層封裝模擬實現

目錄 底層對比&#xff1a; 底層紅黑樹結構和set、map&#xff1a; 底層模擬&#xff1a; 傳值調用&#xff1a; 迭代器&#xff1a; operator &#xff08;&#xff09; find函數 operator&#xff08;&#xff09; 、仿函數 set和map的仿函數 &#xff1a; 圖解&a…