Crontab詳解

crontab是Unix/Linux系統中用于設置周期性任務的工具,通過編輯配置文件實現定時執行命令或腳本。以下是其語法規則和核心要點:

一、基本格式

*    *    *    *    *    command
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 星期幾(0-7,0和7代表周日)
|    |    |    +---------- 月份(1-12或Jan-Dec)
|    |    +--------------- 日期(1-31)
|    +-------------------- 小時(0-23)
+------------------------- 分鐘(0-59)

示例

0 2 * * * /usr/bin/backup.sh  # 每天凌晨2點執行備份腳本

二、時間字段詳解

1. 分鐘(0-59)
  • *:每分鐘執行一次。
  • */5:每5分鐘執行一次(等同于0,5,10,...,55)。
  • 15,30:每小時的15分和30分執行。
  • 1-10:每小時的1到10分鐘執行。
2. 小時(0-23)
  • *:每小時執行一次。
  • 8-17:每天8點到17點(工作時間)執行。
  • 22:每天22點(晚上10點)執行。
3. 日期(1-31)
  • *:每月任意日期執行。
  • 1:每月1號執行。
  • 1,15:每月1號和15號執行。
  • 1-7:每月1號到7號執行。
4. 月份(1-12或Jan-Dec)
  • *:每年任意月份執行。
  • 12:每年12月執行。
  • 3-6:每年3月到6月執行。
5. 星期幾(0-7,0和7代表周日)
  • *:每周任意一天執行。
  • 0:每周日執行。
  • 1-5:每周一到周五執行。
  • 6:每周六執行。
  • SUN:等價于0(支持英文縮寫)。

三、特殊符號與快捷方式

1. 通配符與操作符
  • *:匹配所有值(例如* * * * *表示每分鐘執行)。
  • ,:分隔多個值(例如1,3,5表示1號、3號、5號)。
  • -:指定范圍(例如8-10表示8點到10點)。
  • /:步長間隔(例如*/15表示每15分鐘一次)。
2. 預定義快捷方式
  • @reboot:系統重啟后執行一次。
  • @yearly:每年1月1日0點執行(等價于0 0 1 1 *)。
  • @monthly:每月1日0點執行(等價于0 0 1 * *)。
  • @weekly:每周日0點執行(等價于0 0 * * 0)。
  • @daily:每天0點執行(等價于0 0 * * *)。
  • @hourly:每小時0分執行(等價于0 * * * *)。
3. 特殊處理
  • %符號:在命令中表示換行,需用\%轉義(例如date +\%Y\%m\%d)。
  • 日期與星期組合:若同時設置日期和星期(如0 0 15 * 1),任務會在滿足任一條件時執行,可能導致意外觸發,需謹慎使用。

四、命令與執行細節

  1. 命令路徑

    • 必須使用絕對路徑(例如/usr/bin/backup.sh),避免因環境變量缺失導致執行失敗。
    • 若依賴特定環境變量,可在命令前加載(例如. /etc/profile; /path/to/script.sh)。
  2. 輸出重定向

    • 默認將輸出通過郵件發送給用戶,可通過以下方式屏蔽:
      0 2 * * * /usr/bin/backup.sh >> /dev/null 2>&1  # 標準輸出和錯誤輸出重定向到黑洞
      
    • 若需記錄日志,可指定文件:
      0 2 * * * /usr/bin/backup.sh >> /var/log/backup.log 2>&1
      
  3. 用戶權限

    • 普通用戶通過crontab -e編輯個人任務,系統級任務需修改/etc/crontab/etc/cron.d/下的文件。
    • 通過cron.allowcron.deny文件控制用戶是否有權限使用crontab

五、示例與場景

  1. 每分鐘執行

    * * * * * /usr/bin/monitor.sh  # 實時監控系統狀態
    
  2. 每周一至周五下午5點執行

    0 17 * * 1-5 /usr/bin/send-report.sh  # 發送工作日報告
    
  3. 每月最后一天執行

    0 0 L * * /usr/bin/monthly-cleanup.sh  # L代表每月最后一天(部分系統支持)
    
  4. 系統重啟后執行

    @reboot /usr/bin/start-services.sh  # 啟動服務
    
  5. 每兩小時執行

    0 */2 * * * /usr/bin/check-status.sh  # 每小時0分執行,間隔2小時
    

六、注意事項

  1. 時區問題

    • crontab使用系統時區,若需跨時區執行任務,需在腳本中顯式指定時區(例如TZ=Asia/Shanghai)。
  2. 并發控制

    • 若任務執行時間較長,需避免重復觸發。可通過鎖文件(如flock)或cronwithChain機制(如Go的cron.SkipIfStillRunning)實現。
  3. 調試與日志

    • 查看系統日志:tail -f /var/log/cron(部分系統路徑為/var/log/syslog)。
    • 測試任務時,可臨時縮短時間間隔(如*/1 * * * *)并觀察輸出。
  4. 系統差異

    • 不同Unix變體(如HP-UX、AIX)對*/n語法的支持可能不同,需用列舉法替代(如0,20,40 * * * *表示每20分鐘一次)。

七、管理命令

命令說明
crontab -e編輯當前用戶的定時任務
crontab -l列出當前用戶的定時任務
crontab -r刪除當前用戶的所有定時任務
crontab -u user -e編輯指定用戶的定時任務(需root權限)

系統級任務配置文件:

  • /etc/crontab:全局任務配置,可指定執行用戶(如root)。
  • /etc/cron.d/:存放系統級定時任務文件,支持更靈活的配置。

八、特別示例

0 0/10 * * *
┬ ┬ ┬ ┬ ┬
│ │ │ │ │
│ │ │ │ └─ 星期幾 (0-7, 0和7都代表周日)
│ │ │ └─── 月份 (1-12)
│ │ └───── 日期 (1-31)
│ └─────── 小時 (0-23)
└───────── 分鐘 (0-59)
詳細解釋:
  • 分鐘字段0 表示每小時的第0分鐘(即整點)
  • 小時字段0/10 表示從0點開始,每隔10小時執行一次(即0點、10點、20點)
  • 日期字段* 表示每天
  • 月份字段* 表示每月
  • 星期字段* 表示每周的每一天
執行時間:

這個表達式會在每天的 00:0010:0020:00 準時執行任務。

常見誤區提醒:

如果你的意圖是每10分鐘執行一次,正確的表達式應該是:

*/10 * * * *  # 注意分鐘字段的寫法

0 0/10 * * *每10小時執行一次,且僅在整點觸發。請根據實際需求確認是否符合預期。

九、常見錯誤與排查

  1. 任務未執行

    • 檢查命令路徑是否正確。
    • 確認時間表達式是否符合預期(可用在線工具驗證,如Cron Expression Generator)。
    • 查看日志確認是否有權限或路徑錯誤。
  2. 輸出未重定向

    • 檢查是否遺漏2>&1,導致錯誤輸出未被捕獲。
  3. 環境變量缺失

    • 在命令前顯式加載環境變量(如. /etc/profile),或使用which獲取命令絕對路徑。

通過合理使用crontab,可高效實現自動化運維、數據備份、監控等任務。掌握其語法規則和執行細節,能顯著提升系統管理效率。

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

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

相關文章

中國1km逐月潛在蒸散發數據集 - matlab按shp批量裁剪

中國1km逐月潛在蒸散發數據集 - matlab按shp批量裁剪 1. 數據概述 2 利用掩膜文件對數據進行裁剪 3 完整代碼 4 結語 本篇繼續處理氣象數據,中國1km逐月潛在蒸散發數據集同前節介紹的中國1km降水數據集一樣,都可以從國家青藏高原科學數據中心獲得,數據具有同樣的空間分辨率(…

Node.js鏈接MySql

前言: 在現代 Web 開發和后端服務中,Node.js 因其高性能和異步特性被廣泛使用。MySQL 作為流行的關系型數據庫之一,提供了穩定高效的數據存儲和管理能力。將 Node.js 與 MySQL 結合,可以構建強大的數據驅動型應用。 一、環境準備…

Charles 的 Windows proxy 對爬取瑞數6 網站接口數據的作用分析

其實本文還是源于上個月的這篇文章 ??▼ 耗時兩天半,利用 DrissionPage繞過瑞數6,爬取某藥*局數據經歷~ 不同點是,當時爬取的是列表頁(已爬完),后面爬取的是詳情頁!懂的都懂,差別還…

PHP 測驗

PHP 測驗 引言 PHP 作為一種流行的開源服務器端腳本語言,被廣泛應用于網頁開發、服務器端編程等領域。為了幫助大家更好地理解和掌握 PHP,我們特此推出本 PHP 測驗。通過以下問題,您可以檢驗自己的 PHP 知識水平,同時也能了解自己在哪些方面需要加強。 測驗內容 問題一…

階段1--Linux中的文件服務器(FTP、NAS、SSH)

目錄 一、FTP Server 1.1.簡介 1.2.FTP基礎 1.2.1.控制端口 1.2.2.數據端口 1.3.FTP Server默認配置 1.3.1.安裝vsftp 1.3.2.準備分發的文件 1.3.3.啟動服務 1.3.4.關閉防火墻 1.4.FTP Client(默認僅能下載文件) 1.4.1.LinuxFTP客戶端程序1:l…

SpringBoot與Vue實戰:高效開發秘籍

Spring Boot 是什么? Spring Boot 簡介 Spring Boot 是基于 Spring 框架的快速開發工具,旨在簡化 Spring 應用的初始搭建和開發過程。它通過約定大于配置的原則,提供自動配置、內嵌服務器和依賴管理等功能,使開發者能夠快速構建獨立運行的、生產級別的應用。 核心特點 …

基于 fastapi 的 YOLO 批量目標檢測 API:支持單圖 / 文件夾自適應處理

項目背景 在計算機視覺任務中,我們經常需要對大量圖片進行目標檢測和標注。YOLO 系列模型憑借其高效性成為目標檢測的首選工具之一,但批量處理圖片時往往需要編寫繁瑣的腳本。本文將介紹一個基于 Flask 和 YOLOv11 的 API 服務,支持單張圖片…

周志華《機器學習導論》第13章 半監督學習

目錄 1. 未標記樣本 2. 生成式方法 高斯混合EM 3. 半監督SVM 存在未標記樣本的SVM變形 4. 圖半監督學習 對圖權值迭代矩陣計算 5. 基于分歧的方法 多視圖協同訓練 6. 半監督聚類 k-means的條件變形 6.1 Constrained k-means 利用“必連”與 “勿連”約束 6.2 Constra…

消息推送功能設計指南:精準觸達與用戶體驗的平衡之道

消息推送功能設計指南:精準觸達與用戶體驗的平衡之道消息推送是平臺與用戶保持連接的重要橋梁,既能及時傳遞重要資訊,又能喚醒沉睡用戶、提升活躍度。然而,推送功能若設計不當,可能變成 “信息騷擾”,導致用…

CanOpen--SDO 數據幀分析

CanOpen--SDO 數據幀分析1 介紹1.1 概述1.2 主站與從站2 數據幀詳細分析2.1 主站發送的請求幀 (Client → Server)2.2 從站響應的確認幀 (Server → Client)成功數據幀內容示例錯誤幀2.3 命令字2.4 小端格式:低字節在前3 其他示例60FF index 發送 數值 1000 數據幀分…

Day20-二叉樹基礎知識

二叉樹(Binary Tree)是一種每個節點最多有兩個子節點的樹形數據結構,這兩個子節點分別稱為左子節點和右子節點。二叉樹是計算機科學中最基礎、最常用的樹結構之一,廣泛應用于搜索、排序、表達式解析等領域! 核心特點 …

示波器探頭接口類型與PINTECH品致探頭選型指南

一、示波器探頭接口類型及技術特點1. BNC接口:通用型主流標準- 優勢:75%以上示波器標配接口,具備阻抗匹配靈活(50Ω/1MΩ)、插拔穩定、抗干擾性強等特點。 - 應用場景:適用于大多數示波器(如Le…

Spring之【Bean工廠后置處理器】

目錄 BeanFactoryPostProcessor BeanDefinitionRegistryPostProcessor 使用一下Bean工廠后置處理器 定義包掃描范圍 定義一個組件Bean 定義一個普通的類 自定義一個組件類實現Bean工廠后處理器 測試類 BeanFactoryPostProcessor 該接口是Spring提供的擴展點之一是一個…

【C++】第十八節—一文萬字詳解 | map和set的使用

嗨,我是云邊有個稻草人,與你分享C領域專業知識(*^▽^*) 《C》本篇文章所屬專欄—持續更新中—歡迎訂閱— 目錄 一、序列式容器和關聯式容器 二、set系列的使用 2.1 set和multiset參考?檔 2.2 set類的介紹 2.3 set的構造和迭代器 2.4 set的增刪查…

Java 大視界 -- Java 大數據在智能交通自動駕駛車輛與周邊環境信息融合與決策中的應用(357)

Java 大視界 -- Java 大數據在智能交通自動駕駛車輛與周邊環境信息融合與決策中的應用(357)引言:正文:一、Java 構建的環境信息融合架構1.1 多傳感器數據實時關聯1.2 動態障礙物軌跡預測二、Java 驅動的決策系統設計2.1 緊急決策與…

單細胞轉錄組學+空間轉錄組的整合及思路

一、概念 首先還是老規矩,處理一下概念問題,好將之后的問題進行分類和區分 單細胞轉錄組:指在單個細胞水平上對轉錄組(即細胞內所有轉錄出來的 RNA,主要是 mRNA)進行研究的學科或技術方向,核心…

用Python實現神經網絡(五)

這一節告訴你如何用TensorFlow實現全連接網絡。安裝 DeepChem這一節,你將使用DeepChem 機器學習工具鏈進行實驗在網上可以找到 DeepChem詳細安裝指導。Tox21 Dataset作為我們的建模案例研究,我們使用化學數據庫。毒理學家很感興趣于用機器學習來預測化學…

ReasonFlux:基于思維模板與分層強化學習的高效推理新范式

“以結構化知識壓縮搜索空間,讓輕量模型實現超越尺度的推理性能” ReasonFlux 是由普林斯頓大學與北京大學聯合研發的創新框架(2025年2月發布),通過 結構化思維模板 與 分層強化學習,顯著提升大語言模型在復雜推理任務…

PHP與Web頁面交互:從基礎表單到AJAX實戰

文章目錄 PHP與Web頁面交互:從基礎到高級實踐 1. 引言 2. 基礎表單處理 2.1 HTML表單與PHP交互基礎 2.2 GET與POST方法比較 3. 高級交互技術 3.1 AJAX與PHP交互 3.2 使用Fetch API進行現代AJAX交互 4. 文件上傳處理 5. 安全性考量 5.1 常見安全威脅與防護 5.2 數據驗證與過濾 …

OpenCV基本的圖像處理

參考資料: 參考視頻 視頻參考資料:鏈接: https://pan.baidu.com/s/1_DJTOerxpu5_dSfd4ZNlAA 提取碼: 8v2n 相關代碼 概述: 因為本人是用于機器視覺的圖像處理,所以只記錄了OpenCV的形態學操作和圖像平滑處理兩部分 形態學操作:…