定期執行任務的相關命令
作爲一個linux系統運維師,在我們工作的時候需要定期去執行一些腳本或是命令,比如早上幾點我們要開啓什麼服務,我們不可能守在計算機旁等到那個時候去手動執行那些需要腳本或是命令,萬一我們沒有按時趕到工作場所就會給我們的公司帶來巨大的損失,鑑於此,linux給我們提供了一個很好的命令crontab。
在我們學習此命令之前我還會給大家介紹一個臨時執行定期任務的命令,此命令只是在未來的時間段內執行一次。
一、在未來的某個時間僅執行一次
# at 和 # batch
時間表示法:
HH:MM(AM,PM)
MM/DD/YY
now + # (minutes,hours,days,weeks
[root@localhost ~]# at now+1minutes
at>
當輸入 at now+1minutes 按回車之後會出現at> ,在這之後可以輸入你要執行的命令或是腳本,輸入完之後按crtl+d ,這些命令執行完之後,系統會給你發mail 。
[root@localhost ~]# at -l 列出任務列表 或是(atq)
2 2012-02-27 21:07 a root
[root@localhost ~]# at -r 2 可以刪除未來要執行但尚未執行的任務(atrm job_num)
[root@localhost ~]# at -l 在查看一下列表發現任務以刪除
[root@localhost ~]#
[root@localhost ~]# at -f 1.sh now+1minutes 當是一個腳本的時候需要加-f
batch的方法和at的差不多,只是batch 在用的時候不需要指定時間,計算機會根據你的系統運行情況,在資源利用率低,閒下來的時候去執行你給出的命令。
二、定期執行任務的命令 (現在就開始講今天的重點)
crontab是一個定期執行任務的命令,在使用的時候其實是在編譯一個文件
其分爲兩類,
1. 用戶cron 文件在 /var/spool/cron/USERNAME
2. 系統cron 文件在 /etc/crontab
我們先看一些文件中都有什麼內容
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
~
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
在這個文件中我們只要關注的是後四行,每一行可以分成7列,像下邊的一樣,分別表示對應的關係
01 * * * * root run-parts /etc/cron.hourly
分鐘 小時 天 月 周幾 用戶 命令或腳本
其中在普通用戶中沒有用戶那一列,前五列都可以用數字表示,如果用 * 則表示“每”的意思
還有一些特別的表示方法:
非連續的時間點:
15,45 * * * * 每小時的第15分鐘和第45分鐘執行一次
連續的時間點:
1 8—18 * * * 從8點到18點每小時執行一次
*/#
*/3 * * * * 每隔三分鐘執行一次
[root@localhost ~]# crontab -e 可以打開一個編譯文件,這是普通用戶
[root@localhost ~]# crontab -l 列出自己的任務計劃
*/3 * * * * /sbin/hwclock -s
做爲管理員可以爲普通用戶定義計劃
#crontab -u name -e
其中在我們在執行命令之後在文件中寫的命令,要把命令的路徑給指出來,因爲系統不識別,還要注意的是如果是一個腳本的話,腳本里的命令也要指出其全路徑
我們可以通過如下命令來獲取每個命令的路徑
[root@localhost ~]# which useradd 查看其在那個目錄裏
/usr/sbin/useradd
[root@localhost ~]# rpm -qf /usr/sbin/crond 查看命令是由那個包安裝之後實現的
vixie-cron-4.1-76.el5
我們在將一些其他的查看命令
[root@localhost ~]# chkconfig --list 查看服務列表
當我們學會了怎樣運用crontab命令之後,我們思考一下,其實這個命令是有一些漏洞的,當我們的電腦關機之後,寫在文件中的命令,電腦是不會執行的,也就是我們的定期任務不能順利的完成,所以在有些時候會出現一些問題的。但我們的linux大多是作爲服務器的,機器壓根就不回隨便的重啓或是關機,所以這個命令已經足夠對付我們工作是的任務了。
但爲了滿足一些linux各人發燒有的要求,在此我還是給大家說一個在我們的電腦關機之後系統仍然會執行定期任務的命令anacron,
anacron (即使電腦關機任務依然執行)只有定義了計劃 才能啓動其服務
其文件在/etc/anacrontab
1 65 cron.daily run-parts /etc/cron.daily
1表示曾經過去多少天沒有執行的任務 65系統開機多長分鐘執行沒執行的任務
今天除了這些之外我在給大家說一個小命令 hwclock
#hwclock -w 將date寫入clock
-s 將clock寫入date
date是當前系統的時間,有時候會不穩定,
clock貌似是 biso時間一般都是很穩定的,所以就有了上述的命令,來更改我們錯亂的時間,也可以將一個命令寫在定期任務裏邊,來使機器開啓的時候自動校對時間。
*/3 * * * * /sbin/hwclock -s