# Crond介紹
[TOC]
Crond是Linux系統中用來定期執行命令或制定程序任務的服務,通過`crontab`我們可以在固定的間隔時間執行指定的系統指令或shell script腳本,適合周期性的日志分析或者數據備份,時間間隔的耽誤可以是分、時、日、月、周以及以上任意組合。
Linux任務調度的工作分為以下兩類:
1. 系統自身執行的工作:系統周期性執行的任務工作,如輪詢系統日志,備份系統數據,清理緩存。
2. 用戶執行的工作過:某個用戶定期要做的任務工作,例如每隔十分鐘同步互聯網的時間。
## 語法
crontab [-u sysUser] file.sh
crontab [-u user] [-l|-r|-e]
### 使用者權限文件
|文件|說明|
|-|-|
|`/etc/cron.deny`|該文件中所列用戶不允許使用crontab命令|
|`/etc/cron.allow`|該文件中列出用戶允許使用crontab命令|
|**`/var/spool/cron/`**|所有用戶crontab文件存放的目錄,以用戶名命名|
### 語法含義
|參數名稱|含義|指定示例|
|-|-|-|
|**`-l`**|顯示用戶`crontab`文件內容。|`crontab -l`|
|**`-e`**|進入vi編輯用戶crontab文件|`crontab -e`|
|`-i`|刪除用戶crontab文件前確定提示|`crontab -i`|
|`-r`|從crontab目錄中刪除用戶crontab文件|`crontab -r`|
|-u sysUser|指定使用者|`crontab -u root -l`|
### 指定時間格式
默認情況下,用戶所建立的crontab文件存放于`/var/spool/cron`中,其crontab對應的文件名與用戶名一致。
格式分為七段,前五段為時間設定段,第六段為以那個用戶執行crontab(默認當前操作用戶),第七段為索要執行的命令段。
格式如下:
~~~
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * * root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.momthly
~~~
#### crontab時間段的含義
|段|含義|取值范圍|
|-|-|-|
|第一段|代表分鐘|00~59|
|第二段|代表小時|00~23|
|第三段|代表日期|01~31|
|第四段|代表月份|01~12|
|第五段|代表星期幾,0表示星期日|0~6(方便記憶忽略7)|
#### 特殊符號含義
|特殊符號|含義|
|-|-|
|*|表示任意時間都執行,如`00 23 * * * commond`表示無論何月何日和周的23:00都執行任務|
|-|減號表示分隔符,表示一個時間段,如`00 17-19 * * * commond`表示17~19點每小時的00分執行任務|
|,|表示分割時段,如`30 17,18,19 * * * commond`表示每天的17點、18點和19點的半點時刻執行任務|
|/n|n代表數字,即“每隔n單位hi件”如`*/10 * * * * commond`表示每10分鐘執行一次任務(其中*/10也可以寫成0-59/10)|
### crontab依賴的服務
~~~
[root@localhost.localdomain ~]
# chkconfig --list|grep crond
crond 0:關閉 1:關閉 2:啟用 3:啟用 4:啟用 5:啟用 6:關閉
[root@localhost.localdomain ~]
# /etc/init.d/crond status
crond (pid 7087) 正在運行...
[root@localhost.localdomain ~]
# /etc/init.d/crond restart
停止 crond: [確定]
正在啟動 crond: [確定]
~~~
## 實例
1. **`30 3,12 * * * /bin/bash /scripts/backup.sh`**
每天凌晨3點個中午12點半的時刻(或者每天凌晨3:30和中午12:30)執行任務
2. **`30 */6 * * * /bin/bash /scripts/backup.sh`**
每隔6個半小時執行任務
3. **`30 8-18/2 * * * /bin/bash /scripts/backup.sh`**
早晨8點到下午18點之間每個2個半小時執行任務
4. **`30 21 * * * /bin/bash /scripts/backup.sh`**
每晚21:30執行任務
5. **`45 4 1,10,22 * * /bin/bash /scripts/backup.sh`**
每月1,10,22日的凌晨4:45執行任務
6. **`10 1 * * 60 /bin/bash /scripts/backup.sh`**
每周六、日的凌晨1:10分執行任務
7. **`0,30 18-23 * * * /bin/bash /scripts/backup.sh`**
每天18:00至23:30之間每隔30分鐘執行任務
8. **`00 */1 * * * /bin/bash /scripts/backup.sh`**
每隔一小時整點執行任務
9. **`* 23-7/1 * * * /bin/bash /scripts/backup.sh`**
*晚上23點到早上7點之間,每小時的每分鐘都執行任務*
10. **`0 11 * 4 1-3 /bin/bash /scripts/backup.sh`**
4月的每周一到周三的11點執行任務
## crontab命令的專業寫法
**例:**每分鐘打印自己的名字到/server/log/自己的名字命名的文件中
~~~
# print char test by curder for programer A at 2015-10-20
*/1 * * * * echo 'curder'>>/server/log/curder.log 2>&1
~~~
**說明:**
1. 寫定時任務要寫清楚注釋,如:誰,什么時間,因為誰,做了什么事
2. 執行任務時可以省略用戶,在執行腳本時,盡量加上 `/bin/bash`(可能因為腳本沒有執行權限而無法執行)
3. 需要root權限執行的任務可以登錄到root用戶下然后設置,如果不需要root權限,可以登錄到普通用戶下,然后設置,最后在腳本中將環境變量重新export一下
4. 定時任務命令的結尾最好加上`>/dev/null 2>&1`等內容。`2>&1`使標準錯誤和標準輸出一樣,本命令即把腳本的輸出重定向到/dev/null,即不記錄任何輸出,也不給系統發郵件
5. 在開發定時任務程序或者腳本時,在調試腳本成功后,應盡量把debug及屏幕輸出的內容的命令去掉,如果需要可以定向到日志里。
- Linux的安裝
- Linux的軟件安裝管理
- Linux零碎的命令
- 了解ssh
- 系統調優及安全設置
- Linux系統中的硬鏈接和軟連接
- Linux文件和目錄的屬性及權限
- 命令總結
- 文件目錄管理命令
- cat
- cd
- cp
- ls
- mkdir
- mv
- rm
- touch
- vi
- 硬件檢測內核shell命令
- echo
- alias
- dd
- diff
- date
- grep(重要)
- head
- rpm
- sed(重要)
- tree
- unalias
- yum
- seq
- su
- less
- more
- tail
- awk(重要)
- pwd
- history
- whoami
- find(重要)
- which
- vimdiff
- sudo
- wget
- ln
- chmod
- chown
- vim常用技巧
- scp
- 工作場景應用總結
- 自動刪除n天前日志
- 刪除一個目錄下的所有文件但保留一個文件
- Linux軟件安裝
- php安裝(apache版本)
- vsftpd安裝
- git安裝
- python安裝
- LNMP安裝
- LAMP安裝I
- LAMP安裝II
- svn安裝
- svn在Linux下的命令操作
- svn鉤子簡介
- svn代碼上傳流程
- Crond介紹
- sersync應用指南
- 其他
- 小結一
- 系統調優重新整理tmp
- linux禁止root用戶直接登錄sshd并修改默認端口