crontab工具介紹

crontab

  • crontab 是一個用於設置週期性被執行的任務工具。
  • 週期性執行的任務列表稱爲Cron Table

crontab(選項)(參數)python

  • -e:編輯該用戶的計時器設置;
  • -l:列出該用戶的計時器設置;
  • -r:刪除該用戶的計時器設置;
  • -u<用戶名稱>:指定要設定計時器的用戶名稱。

crontab 實踐

  • 安裝並檢查Crontab 服務
  • crontab 基本組成
  • crontab 的配置文件
  • crontab 工具的使用
  • crontab 的日誌
  • crontab 常見錯誤

  • 檢查Crontab 服務
[root@xuexi-001 ~]# service crond status ······//檢查crond 服務狀態
Redirecting to /bin/systemctl status crond.service
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since 日 2018-06-17 14:18:25 CST; 7h ago
 Main PID: 541 (crond)
   CGroup: /system.slice/crond.service
           └─541 /usr/sbin/crond -n

6月 17 14:18:25 xuexi-001 systemd[1]: Started Command Scheduler.
6月 17 14:18:25 xuexi-001 systemd[1]: Starting Command Scheduler...
6月 17 14:18:26 xuexi-001 crond[541]: (CRON) INFO (RANDOM_DELAY will be ...)
6月 17 14:18:26 xuexi-001 crond[541]: (CRON) INFO (running with inotify ...)
Hint: Some lines were ellipsized, use -l to show in full.

列出服務項須要執行的操做shell

[root@xuexi-001 ~]# service crond
The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.
  • 安裝crontab
  • -yum install -y vixie-cron
  • -yum install -y crontabs

案例

每分鐘都打印當前時間到一個日誌文件中
[root@xuexi-001 ~]# crontab -e ··· 編輯crontab任務
*/1 * * * * date >> /tmp/date.txt 
[root@xuexi-001 ~]# crontab -l ····· 列出當前crontab 任務
*/1 * * * * date >> /tmp/date.txt
[root@xuexi-001 ~]# date
2018年 06月 17日 星期日 21:43:17 CST
[root@xuexi-001 ~]# tail -f /tmp/date.txt ······ 動態顯示date.txt文件內容
2018年 06月 17日 星期日 21:43:01 CST
2018年 06月 17日 星期日 21:44:01 CST
2018年 06月 17日 星期日 21:45:01 CST

crontab 的基本組成

系統服務 crond:每分鐘都會從配置文件刷新定時任務。apache

配置文件:文件方式設置定時任務。工具

配置工具crontab:用於調整定時任務。rest

crontab 的配置文件格式

# .---------------- 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

案例日誌

每晚的21;30重啓apachecode

  • 30 21 * * * service httpd restart

每個月一、十、22日的4:45重啓apachecrontab

  • 45 4 1,10,22 * * service httpd restart

每個月1到10日的4:45重啓apacheip

  • 45 4 1-10 * * service httpd restart

每隔兩分鐘重啓apacheit

  • */2 * * * * service httpd restart
  • 1-59/2 * * * * service httpd restart

晚上11點到早上7點之間,每隔一小時重啓apache

  • 0 23-7/1 * * * service httpd restart

天天18:00至23:00之間每隔30分鐘重啓apache

  • 0,30 18-23 * * * service httpd restart
  • 0-59 18-23 * * * service httpd restart

小結:

  • 表示任什麼時候候都匹配
  • 用」A,B,C「表示A或者B或者C時執行命令
  • 「A-B」表示A-B之間時執行命令
  • 「*/A」表示每A分鐘(小時等)執行一次命令

crontab 配置文件 /etc/crontab

crontab 默認的保存的日誌文件 /var/log/cron

第三和第五個域之間執行的是「或」操做

  • 四月的第一個星期日早晨1時59分運行 a.sh

59 1 1-7 4 *test ` date+%w ` -eq 6 && /root/a.sh

%w 一星期中的第幾日(0-6),0 表明週一

兩小時運行一次

0 */2 * * * date

案例: crontab 中最小隻能設置到每分鐘執行一個命令,若是想每半分鐘執行某個命令怎麼作到呢?

  • 經過shell腳本的sleep 命令配合crontab 便可完成這一功能
  • date && sleep 0.5s && date
[root@xuexi-001 ~]# crontab -e
*/1 * * * * date >> date.log
*/1 * * * * sleep 30s; date >> date.log
[root@xuexi-001 ~]# cat  date.log 
2018年 06月 18日 星期一 00:34:01 CST
2018年 06月 18日 星期一 00:34:32 CST
2018年 06月 18日 星期一 00:35:01 CST
2018年 06月 18日 星期一 00:35:31 CST
相關文章
相關標籤/搜索