小知識點--crontab

來源:互聯網
上載者:User

前言

這兩周學了很多東西,還把golang語言基本掌握了,收穫還是挺多的。在做安全的過程中,有很多需要定時執行的任務,比如抓取主機數量,連接埠資料等,這都逃不開linux中的crontab命令,今天分享一下crontab這個小知識點。提醒大家一下,在大公司伺服器中,部署的基本上都是CentOS,所以大家想學CentOS上的操作,推薦大家看一下《鳥哥私房菜》

命令說明

crontab 命令可以在固定的間隔時間執行指定的系統指令或 shell script指令碼。時間間隔的單位可以是分鐘、小時、日、月、周及以上的任意組合。

命令格式

crontab [-u user] file

或者

crontab [-u user] [-e | -l | -r]

參數解釋

  • -u user:用來設定某個使用者的crontab服務,linux下可能有很多使用者,每個使用者對應著一份crontab任務清單。
  • file:是命令檔案的名字,表示file作為crontab的任務清單進行載入。
  • -e:編輯某個使用者的crontab檔案內容,如果不指定使用者,則是代表這個目前使用者。
  • -l:顯示某個使用者的crontab檔案內容,如果不指定使用者,則是代表這個目前使用者。
  • -r:從/var/spool/cron目錄中刪除某個使用者的crontab檔案,如果不指定使用者,則刪除目前使用者的crontab檔案。
  • -i:在刪除使用者crontab給出確認提示

crontab檔案

crontab命令參數相信大家已經瞭解了,那crontab檔案中,我們需要按照什麼格式寫內容,cron服務才會協助我們定時執行呢?

基本格式

每一條我們想執行的任務,即為crontab檔案中的一行內容。這一行內容的基本格式如下:

minute hour day month week command

minute,hour,day,month,week,command之間以空格相隔,格式含義如下:

  • minute: 表示分鐘,可以是從0到59之間的任何整數。
  • hour:表示小時,可以是從0到23之間的任何整數,0代表著0點。
  • day:表示日期,可以是從1到31之間的任何整數,即為一個月中的某一天。
  • month:表示月份,可以是從1到12之間的任何整數。
  • week:表示星期幾,可以是從0到7之間的任何整數,這裡的0或7代表星期日。
  • command:要執行的命令,可以是系統命令,也可以是自己編寫的指令檔。

在以上各個欄位中,還可以使用以下特殊字元

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

執行個體

在上述講解後,不知大家會不會用了?下面講一些執行個體,協助大家理解和使用。

  1. 每小時的第10和15分鐘執行命令

10,15 * * * * command

2.每隔兩天的上午3點到5點的第10和第15分鐘執行

10,15 3,5 */2 * * command

3.每周六或者周日的4:45 ping一下百度

45 4 * * 6,0 ping www.baidu.com

4.每周一的18 : 00至23 : 00之間每隔30分鐘執行python -h

0,30 18-23 * * 1 python -h

crond服務

crontab檔案是靠crond服務保障執行的,下面是crond服務的一些小操作。

service crond start //啟動服務

service crond stop //關閉服務

service crond restart //重啟服務

service crond reload //重新載入配置

service crond status //查看服務狀態

注意事項

在crontab檔案中定義多個調度任務時,需要特別注意環境變數的設定,因為我們手動執行某個任務時,是在當前shell環境下進行的,程式當然能找到環境變數,而系統自動執行任務調度時,是不會載入任何環境變數的,因此,就需要在crontab檔案中指定任務運行所需的所有環境變數,這樣系統執行任務調度時就沒有問題了,所以你要保證在shell指令碼中提供所有必要的路徑和環境變數。

注意點如下:

1.執行指令碼時最好要寫全域路徑

2.執行的指令碼,比如start.sh,如果引用了環境變數,需要在指令碼中使用source載入環境變數。start.sh部分內容樣本如下:

!/bin/shsource /etc/profile......

3.手動執行指令碼沒問題,但是crontab不執行,這也有可能是環境變數的問題。可以直接在crontab命令總引入環境變數。

* * * * * source /etc/profile;python -h

最後

關注公眾號:七夜安全部落格

  • 回複【1】:領取 Python資料分析 教程大禮包
  • 回複【2】:領取 Python Flask 全套教程
  • 回複【3】:領取 某學院 機器學習 教程
  • 回複【4】:領取 爬蟲 教程
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.