一、crontab基本用法
1.1 cron服務
cron是一個linux下 的定時執行工具,可以在無需人工干預的情況下運行作業。
service crond start //啟動服務
service crond stop //關閉服務
service crond restart //重啟服務
service crond reload //重新載入配置
service crond status //查看服務狀態
1.2 Crontab存放路徑
/var/spool/cron/crontabs #這個目錄下存放的是每個用戶包括root的crontab任務,每個任務以創建者的名字命名。
1.3 基本語法
crontab (選項) (參數)
1.3.1 選項
-e:編輯該用戶的計時器設置;
-l:列出該用戶的計時器設置;
-r:刪除該用戶的計時器設置;
-u<用戶名稱>:指定要設定計時器的用戶名稱。
1.3.2 參數
crontab文件(指定包含待執行任務的crontab文件。可以不指定,默認是/var/spool/cron/crontabs/下名字為當前用戶名的文件)
1.4 crontab文件的含義
# 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
# | | | | |
# * * * * * command
其中
minute: 表示分鍾,可以是從0到59之間的任何整數。
hour:表示小時,可以是從0到23之間的任何整數。
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字段,表示每十分鍾執行一次。
二、示例
2.1每分鍾執行一次command
* * * * * command
2.2 每小時的第3和第20分鍾執行一次command
3,20 * * * * command
2.3 在凌晨3點到晚上20點的每小時第20分鍾執行一次command
20 3-20 * * * command
2.4 每隔兩天的凌晨3點到晚上20點每小時的第20分鍾執行一次command
20 3-20 */2 * * command
2.5 每周一的凌晨3點到晚上20點每小時的第20分鍾執行一次command
20 3-20 * * 1 command
2.6 每隔一個半小時執行一次command
通過設置兩個定時任務可以實現每一個半小時的定時任務。在設定時兩個任務的開始時間剛好錯開90分鍾,每個任務每3小時執行一次即可。
20 0-23/3 * * * command
50 1-23/3 * * * command
- 注:兩個任務中command為同一個腳本或命令
三、故障排查
3.1 定時任務設置后保存不了
guoew@ubuntu:/etc/cron.daily$ crontab -e
crontab: installing new crontab
"/tmp/crontab.FLUGtP/crontab":23: bad minute
errors in crontab file, can't install.
Do you want to retry the same edit? (y/n)
仔細查看上面保存會發現在第23行分鍾的格式設置不正確,修改為正確格式即可。
3.2 定時任務設置不生效
定時任務不生效原因可能存在下面三種情況:
- 定時任務格式或command本身語法不正確
- command 沒有執行權限