一、用途:定期備份重要文件、執行某些計划任務。
二、cron的運行原理:
Linux上的周期性任務通常都是由cron這個守護進程來完成的。cron隨系統啟動而啟動,一般不需要用戶干預。當cron啟動時,它會讀取配置文件,並把信息保存在內存中,每過一分鍾,cron重新檢查配置文件,並執行這一分鍾內安排的任務。
三、crontab的管理:
cron的配置文件叫做crontab。和其他服務器不一樣,Ubuntu版本總共可以在3個地方找到cron的配置文件。
1、系統的全局cron配置文件:
(1)vi /etc/crontab
(2)ls -l /etc/cron.d/ (此處的文件不需要管理員手動配置,主要用於應用軟件設置自己的任務計划)
(3)除此之外,可以通過命令:ls -l /etc/ | grep cron 列出與cron相關的一些日常配置文件
2、普通用戶的配置文件:
(1)普通用戶的配置文件以用戶的登錄名命名:/var/spool/cron/tom.cron
(2)和系統的crontab不同,編輯用戶自己的cron配置文件應該使用crontab命令。crontab命令的基本用法:
a、crontab filename // 將文件安裝為用戶的crontab文件,並替換原來的版本
b、crontab -e // 調用編輯器打開用戶的crontab文件,在用戶完成編輯后保存並提交
c、crontab -l // 列出用戶crontab文件(如果存在的話)中的內容
d、crontab -r // 刪除用戶自己的crontab文件
3、管理用戶的cron任務計划:
(1)管理文件/etc/cron.allow、/etc/cron.deny的創建,如果沒有這兩個文件,在Ubuntu下,只有root有權限提交cronta。
(2)root用戶的crontab命令比普通用戶的crontab命令多一個 -u 選項,用於指定這條命令對哪個用戶生效:
eg: $ sudo crontab -u mike mike_cron
$ sudo crontab -u john -r // 刪除john的crontab文件
四、創建自己的配置文件:
格式: 分鍾 小時 日期 月份 星期幾
eg: 0 23 * * 5 [username] (command1;command2;....)
// 每2分鍾執行一次
*/2 * * * * echo "This is a Cron Test at $(date)" >> /home/ts/t.txt
五、常見問題:
在cron的實際使用過程中,你會遇到很多問題:
1、crontab在指定的時間點沒有達到你預期的結果,而你給過多次檢查腳本確實沒有錯誤,但它就是不執行,這時候誰都糾結,但機器是死的,人是活的,如果遇到這種情況則可以通過查看cron.log來排查出錯原因,要想查看cron.log,你首先需要開啟cron日志機制,過程是:
~$ sudo vi /etc/rsyslog.d/50-default.conf #cron.* /var/log/cron.log //去掉#,開啟log機制 ~$ sudo service rsyslog restart ~$ sudo service cron restart
2、/var/log/cron.log:Jun 8 14:48:01 ubuntu CRON[5706]: (CRON) info (No MTA installed, discarding output)
剛開始我也不明白它為什么會報這個錯,后來明白了,答案在這里:
Linux uses mail for sending notifications to the user. Most linux distributions have an mail service (including an mta) installed.
Ubuntu not.think your webserver program created its own cronjob due the installation process for sending notifications via mail. You can install a mail service, postfix for example, to solve this problem.
這一段話的大致意思是說,crontab執行腳本時是不會直接錯誤的信息輸出,而是會以郵件的形式發送到你的郵箱里,這時候就需要郵件服務器了,如果你沒有安裝郵件服務器,它就會報這個錯。如果是測試,可以用下面的辦法來解決:
This happens because your cron jobs are producing output and then the cron daemon tries to email that output to you (i.e. root). If you don't need that output, the easiest way to solve this is to discard it at the crontab:
$ sudo crontab -e
and add ">/dev/null 2>&1" (without quotes) to every job
六、未完待續~