Linux加載後, 它將初始化硬件和設備驅動, 然後運行第一個進程init。init根據配置文件繼續引導過程, 啟動其它進程。通常情況下,修改放置在 /etc/rc或 /etc/rc.d 或 /etc/rc?.d 目錄下的腳本文件,可以使 init自動啟動其它程序。例如:編輯 /etc/rc.d/rc.local 文件,在文件最末加上一 行“xinit”或“startx”,可以在開機啟動後直接進入X-Window。
2.登錄時自動運行程序
用戶登錄時,bash首先自動執行系統管理員建立的全局登錄script :/ect/profile。然後bash在用戶起始 目錄下按順序查找三個特殊文件中的一個:/.bash_profile、/.bash_login、/.profile,但只執行最先找到的 一個。
因此,只需根據實際需要在上述文件中加入命令就可以實現用戶登錄時自動運行某些程序(類似於DOS下的 Autoexec.bat)。
3.退出登錄時自動運行程序
退出登錄時,bash自動執行個人的退出登錄腳本/.bash_logout。例如,在/.bash_logout中加入命令“tar -cvzf c.source.tgz *.c”,則在每次退出登錄時自動執行 “tar” 命令備份 *.c 文件。
4.定期自動運行程序
Linux有一個稱為crond的守護程序,主要功能是周期性地檢查 /var/spool/cron目錄下的一組命令文件的內 容,並在設定的時間執行這些文件中的命令。用戶可以通過crontab 命令來建立、修改、刪除這些命令文件。
例如,建立文件crondFile,內容為“00 9 23 Jan * HappyBirthday”,運行“crontab cronFile”命令 後,每當元月23日上午9:00系統自動執行“HappyBirthday”的程序(“*”表示不管當天是星期幾)。
5.定時自動運行程序一次
定時執行命令at 與crond 類似(但它只執行一次):命令在給定的時間執行,但不自動重復。at命令的一 般格式為:at [ -f file ] time ,在指定的時間執行file文件中所給出的所有命令。也可直接從鍵盤輸入命 令:
$ at 12:00
at>mailto Roger -s ″Have a lunch″ < plan.txt
at>Ctr-D
Job 1 at 2000-11-09 12:00
2000-11-09 12:00時候自動發一標題為“Have a lunch”,內容為plan.txt文件內容的郵件給Roger。
定期運行程序或者腳本是管理員要面臨一個很普遍的問題,
一、 使用crond監控程序運行程序
1. 使用cron來定期執行任務
使用crond (cron監控程序)來定期運行一些任務,比如備份日志、數據庫、把日志發送到自己郵箱等等操作都可以又定期運行程序來完成。
crond是個腳本,每次Linux啟動的時候都自動起到該腳本,該腳本是 /etc/rc.d/init.d 下面的,每次系統啟動的時候就自動會啟動該目錄下
的腳本。
cron有兩個配置文件,一個/etc/crontab,是一個全局配置文件,一組是crontab命令生成生成的配置文件,是屬於用戶級的。
一般對管理員來說,只要使用全局配置的/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
我們稍微來分析一下這個文件:
/* 設置基於什麼shell來運行,我們這裡是基於bash shell */
SHELL=/bin/bash
/* 指定目錄中有次文件的命令時,不需要完整目錄路經 */
PATH=/sbin:/bin:/usr/sbin:/usr/bin
/* 使用cron實際工作時,見通過郵件來同志root用戶 */
MAILTO=root
/* 與/etc/crontab配置文件相關的主目錄為根目錄 */
HOME=/
/* 好了,這裡是關鍵是,下面的是要指定什麼時間運行什麼目錄下的任務,run-parts命令是運行指定目錄下的每個腳本 */
# run-parts
/* 這一句是在每天每小時過後一分鐘運行/etc/cron.hourly目錄中的每個腳本文件 */
01 * * * * root run-parts /etc/cron.hourly
/* 在每天凌晨4點2分運行/etc/cron.daily目錄中的每個腳本文件 */
02 4 * * * root run-parts /etc/cron.daily
/* 在每個星期天凌晨4點22分運行/etc/cron.weekly目錄中的每個腳本文件 */
22 4 * * 0 root run-parts /etc/cron.weekly
/* 在每個月的第一天凌晨4點42分運行/etc/cron.monthly目錄中的每個腳本文件 */
42 4 1 * * root run-parts /etc/cron.monthly
大家看到裡面的“*”一定覺得很奇怪,下面我們句稍微來了解一下cron的語法:
上面腳本中的時間是從左到右的,分別列出了五個字段,我們看下面的表:
------------------------------------------------
字段 取值范圍
------------------------------------------------
Minute 0 ~ 59
Hour 0 ~ 23,其中0是午夜,20是晚上8點
Day 1 ~ 31
Month 1 ~ 12
Day of week 0 ~ 7,其中0和7是表示星期天
------------------------------------------------
任何字段中的星號是通配符,例如,如果第一個字段包括星號,則特定若無其事在可能的每一分鐘運行。如果要指定時間范圍,比如上午8點到
下午4點,則可以見第二個字段設置為8~16。如果要隔一天運行任務,則可以將第三個字段設置為*/2。可以看出,如果五個字段(minute、hour
、day、month、day of week) 之後,cron中的每個字段就沒什麼神秘之處了。