ubuntu 16.04 周期定時任務 crontab 的 使用


簡介

  • linux環境下定時或者周期性的執行一些任務通常由cron這個守護進程來完成,這是一個系統自帶的相對也比較方便的系統工具。

  • cron進程能實現定時任務這些需求,cron搭配shell腳本,非常復雜的指令也沒有問題。

  • crontab命令是cron table的簡寫,它是cron的配置文件,也可以叫它作業列表,我們可以在以下文件夾內找到相關配置文件。

目錄結構

  • /var/spool/cron/crontabs 用戶調度任務 目錄下存放的是每個用戶包括root的crontab任務,每個任務以創建者的名字命名,比如用戶定期要執行的工作,比如用戶數據備份、定時郵件提醒等
  • /etc/crontab 系統調度任務 這個文件負責調度各種管理和維護任務,比如寫緩存數據到硬盤、日志清理等。
  • /etc/cron.d/ 這個目錄用來存放任何要執行的crontab文件或腳本。

我們還可以把腳本放在/etc/cron.hourly/etc/cron.daily/etc/cron.weekly/etc/cron.monthly目錄中,讓它每小時/天/星期、月執行一次。

crontab的使用

crontab 安裝

一般是系統自帶,如果沒有需要自己裝下

sudo apt-get install cron

crontab 命令格式

crontab [ -u user ] [ -i ] { -e | -l | -r } //省略用戶表示操作當前用戶的crontab
		(默認操作是 replace)
	-e	(編輯用戶的工作表)
	-l	(列出用戶的工作表)
	-r	(刪除用戶的工作表)
	-i	(在刪除用戶的crontab文件時給確認提示)

我們用crontab -e 既可進入當前用戶的工作表編輯

crontab 默認編輯器配置

第一次使用crontab 時,會出現以下提示:

root@ubuntu:# crontab -e
Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.basic
  4. /usr/bin/vim.tiny

這個提示是讓用戶選擇編輯器,正常情況下我們選擇第三個就可以。如果選錯了可以執行select-editor命令在選擇一次。

root@ubuntu:# crontab -e

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.basic
  4. /usr/bin/vim.tiny

Choose 1-4 [2]: 3
root@B-OPS-68-1:~#

crontab 任務配置編寫

crontab -e進入當前用戶的工作表編輯

crontab的配置語法為 時間+動作,其時間有分、時、日、月、周 五種,每個時間注意用空格分開,動作就是你要執行的命令

格式:

分 minute (m) 小時 hour (h) 日 day of month (dom) 月 month (mon) 星期 day of week (dow) 命令
0-59 0-23 1-31 1-12 0-6 command

其中時間還可以使用下列特殊字符,更細致的設置時間

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

小 結:
數字的表示最好用阿拉伯數字顯示
周和日最好不要同時用
定時任務要加注解
可以定向到日志文件或者空文件
定時任務一定是絕對路徑,且目錄必須存在才能出結果
crontab 服務一定要開啟運行

示例

着重說明一下,為了避免權限問題請切換到root用戶再創建對cron服務的任務。

crontab -e進入任務配置編寫,內容如下圖

image-20200426174939086

每分鍾執行一次 echo "hello world...",並將結果輸出到/var/log/test.log
* * * * * echo "hello world...\n" >> /var/log/test.log

執行cat /var/log/test.log,結果

image-20200426174827897

每天的23點55分執行命令
55 23 * * * myCommand
每月的最后一天的23點55分執行命令
55 23 * * * if [`date +%d -d tomorrow` = 01 ] ; then myCommand ; fi 
or 
55 23 * * * if [`date +%d -d tomorrow` = 01 ] ; then ; command
更多其他示例(示例參考菜鳥教程)

實例
實例1:每1分鍾執行一次myCommand

* * * * * myCommand

實例2:每小時的第3和第15分鍾執行

3,15 * * * * myCommand

實例3:在上午8點到11點的第3和第15分鍾執行

3,15 8-11 * * * myCommand

實例4:每隔兩天的上午8點到11點的第3和第15分鍾執行

3,15 8-11 */2  *  * myCommand

實例5:每周一上午8點到11點的第3和第15分鍾執行

3,15 8-11 * * 1 myCommand

實例6:每晚的21:30重啟smb

30 21 * * * /etc/init.d/smb restart

實例7:每月1、10、22日的4 : 45重啟smb

45 4 1,10,22 * * /etc/init.d/smb restart

實例8:每周六、周日的1 : 10重啟smb

10 1 * * 6,0 /etc/init.d/smb restart

實例9:每天18 : 00至23 : 00之間每隔30分鍾重啟smb

0,30 18-23 * * * /etc/init.d/smb restart

實例10:每星期六的晚上11 : 00 pm重啟smb

0 23 * * 6 /etc/init.d/smb restart

實例11:每一小時重啟smb

* */1 * * * /etc/init.d/smb restart

實例12:晚上11點到早上7點之間,每隔一小時重啟smb

* 23-7/1 * * * /etc/init.d/smb restart

可能會用到的其他命令

service cron start    //啟動服務
service cron stop     //關閉服務
service cron restart  //重啟服務
service cron reload   //重新載入配置
service cron status   //查看服務狀態 

tail /var/log/syslog  //使用crontab進行設置定時任務,任務沒有執行,查看系統日志排查

ps -ef | grep cron  //查看cron 進程是否存在

如果一定要特定用戶使用cron服務可以參考下面兩篇文章

http://www.imooc.com/qadetail/263732
https://blog.csdn.net/len_yue_mo_fu/article/details/83375421


免責聲明!

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



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