任務管理工具之 Crontab

来源:http://www.cnblogs.com/divent/archive/2016/08/05/5743008.html
-Advertisement-
Play Games

Crontab 是 Linux 平臺下的一款用於迴圈執行例行任務的工具,Linux 系統由 cron (crond) 這個系統服務來控制任務 , Linux系統本來就有很多的計劃任務需要啟動 , 所以這個系統服務是預設開機啟動的 。 Linux 為使用者提供的計劃任務的命令就是 Crontab ...


Crontab 是 Linux 平臺下的一款用於迴圈執行例行任務的工具,Linux 系統由 cron (crond) 這個系統服務來控制任務 , Linux系統本來就有很多的計劃任務需要啟動 , 所以這個系統服務是預設開機啟動的 。 Linux 為使用者提供的計劃任務的命令就是 Crontab

Crontab 是 Linux 下用來周期性執行任務或者等待處理某些事情的時候

Crontab 配置文件

Crontab 的周期性任務主要分為兩種:系統任務 / 用戶任務

  • 系統任務就是系統周期性需要執行的任務,比如說定時執行緩存清理任務,記錄日誌等等。系統任務的配置文件在 /etc/crontab

這裡是 crontab 的配置文件中的內容

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

前面 4 行用於配置 cron 的環境變數,環境變數的配置不在這裡討論了,之後的內容是 crontab 的用法的一些簡單的解釋

  • 用戶的周期性任務就可以使用 crontab 工具,所有用戶制定的 crontab 計劃任務都被保存在 /var/spool/cron 中,文件名即用戶名

Crontab 文件的含義

在上面的crontab文件中已經包含了一部分的解釋,這裡我將其翻譯為中文

SHELL=/bin/sh        
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# 詳細的解釋可以查看 man 手冊

# 舉例:
# .---------------- 分 (0 - 59)        
# |  .------------- 時 (0 - 23)
# |  |  .---------- 日期(每月) (1 - 31)
# |  |  |  .------- 月 (1 - 12) 也可以使用月的英文,例如 jan,feb,mar,apr ...
# |  |  |  |  .---- 日期(每周) (0 - 6) (周日即是 0 也是 7 )也可以使用sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * 想要執行命令的用戶(這個參數可以為空)   你想要執行的命令

Crontab 一共包含包括 7 個欄位,前五個欄位是關於設置執行周期的,第六個欄位用於指定你想要執行的命令的用戶,第七個欄位是要執行的命令

在前5個欄位中,還可以使用以下的特殊字元

星號 (*):代表所有可能的值,例如month欄位如果是星號,則表示在滿足其它欄位的制約條件後每月都執行該命令操作。
逗號 (,):可以用逗號隔開的值指定一個列表範圍,例如,“1,2,5,7,8,9”
中杠 (-):可以用整數之間的中杠表示一個整數範圍,例如“2-6”表示“2,3,4,5,6”
正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute欄位,表示每十分鐘執行一次。

相關的許可權文件

  • /etc/cron.deny 該文件中所列的用戶不允許使用 crontab 命令
  • /etc/cron.allow 該文件中所列的用戶允許使用 crontab 命令
  • /var/spool/cron/ 所有用戶 crontab 文件存放的目錄,文件名即用戶名

Crontab 服務

  • 安裝 Crontab 服務

CentOS 7.x

yum install crontabs

Fedora 23+

dnf install crontabs 

在大多數 Linux 發行版中已經自帶的 Crontab ,依舊寫一下安裝方法

  • 啟用服務

    systemctl start crond
  • 停止服務

    systemctl stop crond
  • 查看服務狀態

    systemctl status crond 
  • 加入開機啟動

    systemctl enable crond 
  • 取消開機啟動

    systemctl disable crond 

命令格式詳解

Usage:
crontab [options] file
crontab [options]
crontab -n [hostname]
 
Options:
 -u <user>  define user //設定某個用戶的crontab服務,例如,“-u user1”表示設定 user1 用戶的 crontab 服務,此參數一般由root用戶來運行
 -e         edit user's crontab //編輯 crontab 文件內容。如果不指定用戶,則表示編輯當前用戶的crontab文件
 -l         list user's crontab //顯示 crontab 文件內容,如果不指定用戶,則表示顯示當前用戶的crontab文件內容
 -r         delete user's crontab //刪除某個用戶的 crontab 文件,如果不指定用戶,則預設刪除當前用戶的crontab文件,此動作一般由 root 來執行
 -i         prompt before deleting //在刪除用戶的crontab文件時給確認提示
 -n <host>  set host in cluster to run users' crontabs //這個選項只有才 cron(8) 才啟用,可以根據已經創建好了的配置文件來指定得對於一個集群來執行任務
 -c         get host in cluster to run users' crontabs //這個選項只有才 cron(8) 才啟用,可以查看集群目前的狀態,需要和 -n 協同使用
 -s         selinux context  //selinux 相關選項
 -x <mask>  enable debugging //開啟調試

使用方法

  • 輸入 crontab -e 並回車即可開始編輯當前用戶的 crontab 文件,編輯完成保存之後文件立即生效

預設使用 vi 編輯器,如果想要使用 vim 編輯器或者其他編輯器,可以新建環境變數 EDITOR,變數值為你想要使用的編輯器的指令,例如我想要使用 nano 作為編輯器,就可以執行命令 “export EDITOR=nano” 來添加一個環境變數。
如果想要讓環境變數永久生效,可以將要執行的命令寫入到 “~/.bashrc”中,這樣下次啟動的時候就會自動配置。

  • 如果想要刪除 crontab 文件可以使用 crontab -r 來刪除當前用戶的 crontab 文件
  • 想要快速查看 crontab 文件可以使用命令 crontab -l

備份 crontab 文件

為了防止文件被意外刪除 , 我們可以在建立好了 crontab 任務之後備份一下相關的配置文件,筆者的思路是在複製一次當期的文檔併在後面加上 “.backup” 來示意是備份文件,通常只需要執行以下命令(以 root 用戶為例)

cp /var/spool/cron/root /var/spool/cron/root.bachup

如果當前用戶沒有許可權的話,可以先將自己的配置文件複製到自己的 HOME 目錄下也是可以的

一些簡單的示例

每個月的 1 號的 2:30 分重啟 Apache 服務

30 2 1 * *  systemctl restart httpd  

每個星期的星期一的早上1點重啟 mariadb

0 1 * * 1 systemctl restart mariadb

更多的示例可以通過搜索輕鬆得找到,這裡就不多說了

註意事項

通常來說,我們建立的 crontab 任務都是保存了之後立即執行的,但是有的時候卻無法執行,將命令單獨拿出來卻可以使用,這個時候就需要檢查一下 crontab 文件的環境變數是否正常。cron 不是 shell,在執行的時候是不知道環境變數的,所以在腳本或者說是配置文件中提供必要的環境變數文件以及路徑,主要註意以下幾點

  1. 配置文件中一點涉及路徑時,使用絕對路徑
  2. 任務執行需要用到 python 或者 java 又或者其他環境變數的時候,需要通過 source 命令引入環境變數
  3. 在某些情況下,手動執行腳本可以使用,但是放在 Crontab 中就無法執行,就很有可能是由於環境變數引起的故障,可以通過在 crontab 中直接引入環境變數。

其他事項

  • 很奇怪的是在我查閱了很多的資料,發現都說在 crontab 的任務執行完畢之後會向當前系統用戶發送一封郵件,但是我的 crontab 在進行了2天的任務都沒有接收到任何郵件
  • crontab 的文件剛剛寫入不一定會立即執行,執行的延遲大概在2分鐘左右,如果重啟 crond 服務則立即執行
  • 據說在 crontab 中 % 是有特殊含義的,表示換行的意思。但是在筆者的驗證中沒有發現這一現象
  • 如果只運行 crontab -r 有可能刪除 crontab 目錄下的所有用戶的 crontab

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

-Advertisement-
Play Games
更多相關文章
  • 安裝Redis包 在\Python27\Scripts目錄下執行 Python操作Redis 結果 ...
  • http://stackoverflow.com/questions/12426320/how-do-i-set-the-default-schema-for-a-user-in-mysql http://stackoverflow.com/questions/12426320/how-do-i-s ...
  • 題目:設有一資料庫,包括四個表:學生表(Student)、課程表(Course)、成績表(Score)以及教師信息表(Teacher)。 四個表的結構分別如表1-1的表(一)~表(四)所示,數據如表1-2的表(一)~表(四)所示。用SQL語句創建四個表並完成相關題目。 表1-1資料庫的表結構 表(一 ...
  • MySql學習筆記 ...
  • Oracle學習筆記——點滴彙總 http://www.botangdb.com/ Oracle GI = Grid Infrastructure = ASM + Cluster ...
  • 在 Oracle 中,ST_Geometry 和 ST_Raster 的 SQL 函數使用通過 Oracle 的外部過程代理(即 extproc)訪問的共用庫。要將 SQL 和 ST_Geometry 或 ST_Raster 配合使用或訪問 GDB_ITEMS_VW 和 GDB_ITEMRELATI ...
  • 1、執行環境:可以在SQLPLUS.EXE或者DOS(命令行)中執行(DOS命令可以執行是由於..\product\11.2.0\client_1\bin被設置了環境變數) 2、執行語句: 一、數據導出: 1 將資料庫TEST完全導出,用戶名system 密碼manager 導出到D:\daochu ...
  • // order by 排序 //<![CDATA[ 值 ]]> 過濾符號 //${}方式會引發SQL註入 //#{} 解析的是占位符 <![CDATA[ order by ${參數1} ${參數2} ]]> 例子: SQL:select * from A where A.id=#{id} id=h ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...