Linux學習21-設置定時任務crontab


前言

做自動化測試寫的腳本需設置定時任務,在指定的時間去執行,這就需要用到定時任務。之前用jenkins可以在里面設置定時任務,很好用,其實不用jenkins,在linux上也可以用crontab做個定時任務。
本篇學下crontab定時任務的語法,制作一個簡單的python腳本文件,使用crontab定時執行

crontab語法

crontab一般在目錄/etc/crontab,可以用cat命令查看到里面的內容

[root@yoyo etc]# cat /etc/crontab
SHELL=/bin/bash
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

crontab定時任務命令規則:

星期 命令 路徑
minute hour day month week command path
* * * * * command path
  • minute: 表示分鍾,可以是從0到59之間的任何整數。
  • hour:表示小時,可以是從0到23之間的任何整數。
  • day:表示日期,可以是從1到31之間的任何整數。
  • month:表示月份,可以是從1到12之間的任何整數。
  • week:表示星期幾,可以是從0到7之間的任何整數,這里的0或7代表星期日。
  • command:要執行的命令,可以是系統命令,也可以是自己編寫的腳本文件。
  • path:需執行的文件,用絕對路徑

crontab命令常用的特殊字符

符號 說明
* 表示任何時刻
, 表示分割
- 表示一個段,如第二段里: 1-5,就表示1到5點
/n 表示每個n的單位執行一次,如第二段里,*/1, 就表示每隔1個小時執行一次命令。也可以寫成1-23/1

編輯crontab文件

各個參數說明:

參數 說明
-e 執行文字編輯器來設定時程表,內定的文字編輯器是 vi(可以指定別的用戶,但是必須擁有權限)
-r 刪除目前的時程表
-l 列出目前的時程表
-v 列出用戶cron作業的狀態

使用crontab -e去編輯一個定時任務,默認進入vi編輯器,按i進入編輯模式,編輯如下內容

 */1 * * * * /bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log

實現的功能:每分鍾執行一次 echo 'hello world ! ~yoyo!' ,輸出的內容保存到~/yoyo.log目錄

編輯完成后,按esc鍵 :wq保存退出,使用crontab -l查看當前任務狀態

[root@yoyo /]# crontab -e
crontab: installing new crontab
[root@yoyo /]# crontab -l
*/1 * * * * /bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log

等一分鍾后,cd到~目錄,使用tail查看輸出的內容

[root@yoyo /]# cd ~
[root@yoyo ~]# ll
total 28
drwxr-xr-x 2 root    root     4096 Jun 29 17:55 conf
drwxr-xr-x 4 polkitd ssh_keys 4096 Jun 29 17:55 data
drwxr-xr-x 2 root    root     4096 Jun 29 17:55 logs
drwxr-xr-x 5 root    root     4096 Jun 29 17:39 mysql
-rw------- 1 root    root      433 May 17 08:34 nohup.out
drwxr-xr-x 4 root    root     4096 Jun 30 17:16 yoyo
-rw-r--r-- 1 root    root       63 Jul 10 23:12 yoyo.log
[root@yoyo ~]# tail yoyo.log
hello world ! ~yoyo!
hello world ! ~yoyo!
hello world ! ~yoyo!
[root@yoyo ~]# 

查看crontab執行的歷史

我們如何知道crontab是否執行了定時任何呢?可以在 /var/log目錄查看運行的日志記錄,使用tail 查看

tail -10 /var/log/cron

[root@yoyo log]# cd /var/log
[root@yoyo log]# tail -10 cron
Jul 10 23:10:50 yoyo crontab[8045]: PAM pam_end: NULL pam handle passed
Jul 10 23:10:54 yoyo crontab[8106]: (root) LIST (root)
Jul 10 23:10:54 yoyo crontab[8106]: PAM pam_end: NULL pam handle passed
Jul 10 23:11:01 yoyo crond[541]: (root) RELOAD (/var/spool/cron/root)
Jul 10 23:11:01 yoyo CROND[8125]: (root) CMD (/bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log)
Jul 10 23:12:01 yoyo CROND[8232]: (root) CMD (/bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log)
Jul 10 23:13:01 yoyo CROND[8340]: (root) CMD (/bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log)
Jul 10 23:14:01 yoyo CROND[8446]: (root) CMD (/bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log)
Jul 10 23:15:01 yoyo CROND[8553]: (root) CMD (/bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log)
Jul 10 23:16:01 yoyo CROND[8662]: (root) CMD (/bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log)
[root@yoyo log]# 

常用的定時任務

任務名稱 指令
每1分鍾執行一次command */1 * * * * command
每小時的第15,20,30分鍾執行 15,20,30 * * * * command
每天早上9點和晚上17點上下班執行 * 9,17 * * * command
每天早上8點30和晚上20點30執行 30 8,20 * * * command
每隔兩天的上午8點到11點的第3和第15分鍾執行 3,15 8-11 */2 * * command
每個星期一的上午8點到11點的第3和第15分鍾執行 3,15 8-11 * * 1 command
每月1、10、22日的4 : 45執行 45 4 1,10,22 * * command
每周1,3,5 晚上八點執行 * 20 * * 1,3,5 command
每周1,2, 3 4, 5 早點9點20打卡 20 9 * * 1,2,3,4,5 command
每個月的20號都來那么一次 * * 20 * * command
每年的情人節執行一次 * * 14 2 * command
每2個小時執行一次 * */2 * * * command

執行python腳本

接下來用python寫個hello world,去執行下吧

[root@yoyo log]# cd ~
[root@yoyo ~]# vi hello.py
# 編輯 print("hello")
[root@yoyo ~]# python hello.py 
hello
[root@yoyo ~]# crontab -e
crontab: installing new crontab
[root@yoyo ~]# crontab -l
*/1 * * * * /bin/python ~/hello.py >> ~/hello.log
[root@yoyo ~]# ll
total 36
drwxr-xr-x 2 root    root     4096 Jun 29 17:55 conf
drwxr-xr-x 4 polkitd ssh_keys 4096 Jun 29 17:55 data
-rw-r--r-- 1 root    root        6 Jul 10 23:36 hello.log
-rw-r--r-- 1 root    root       16 Jul 10 23:34 hello.py
drwxr-xr-x 2 root    root     4096 Jun 29 17:55 logs
drwxr-xr-x 5 root    root     4096 Jun 29 17:39 mysql
-rw------- 1 root    root      433 May 17 08:34 nohup.out
drwxr-xr-x 4 root    root     4096 Jun 30 17:16 yoyo
-rw-r--r-- 1 root    root      546 Jul 10 23:35 yoyo.log
[root@yoyo ~]# tail hello.log 
hello
hello


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM