Linux中自動運行程序

文章轉載於 http://www.cnblogs.com/liujiahi/archive/2011/03/04/2196405.html

1.開機啓動時自動運行程序 

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中的每個字段就沒什麼神祕之處了。


2. 用戶自己的cron
用戶也可以計劃用戶自己的cron任務,比如他想要在半夜整理他的文件,然後發送郵件給自己,只要這個用戶他沒有在/etc/cron.deny表中,

就可以使用crontab -e命令來啓動自己的cron文件。

3. 對cron的訪問控制
默認情況下,所有用戶都能訪問cron工具,要對cron進行訪問控制,則可以生成/etc/cron.allow與/etc/cron.deny文件。
(1)這兩個文件都不存在時,每個用戶都可以訪問cron工具]
(2)存在/etc/cron.allow文件時,則只有cron.allow文件中允許的用戶才能訪問cron工具,如果也有/etc/cron.deny文件,則忽略cron.deny文

二、 使用at命令定期運行程序

1. 使用cron運行任務
cron任務的缺點是計劃要經常運行,假如我們只是想要讓特定任務運行一次呢?那麼,這時候就要用到at監控程序了。
設置at命令很簡單,指示定運行的時間,那麼就會在哪個時候運行。at類似打印進程,會把任務放到/var/spool/at目錄中,到指定時間運行它
。at命令相當於另一個shell,運行at time命令時,它發送一個個命令,可以輸入任意命令或者程序。at now + time命令可以在指示任務。

假設處理一個大型數據庫,要在別人不用系統時去處理數據,比如凌晨2點5分。那麼我們就應該先建立/home/mj/airplane腳本管理數據庫,計

劃處理/home/mj/air-safe文件中的結果。正常方式是這樣啓動下列命令:

# at 2:05 tomorrow
at> /home/mj/airplane > /home/mj/air-safe
at> Ctrl+D

AT Time中的時間表示方法
-----------------------------------------------------------------------
時間         例子                      說明
-----------------------------------------------------------------------
Minute       at now + 5 minutes        任務在5分鐘後運行
Hour         at now + 1 hour           任務在1小時後運行
Days         at now + 3 days           任務在3天后運行
Weeks        at now + 2 weeks          任務在兩週後運行
Fixed        at midnight               任務在午夜運行
Fixed        at 10:30pm                任務在晚上10點30分開始
Fixed        at 1:00 12/20/04          任務在2004年12月20日凌晨1點開始
-----------------------------------------------------------------------

2. 查看目前在等待執行的任務
輸入任務後,可以使用atq命令可以看到目前等待執行的任務,輸出提供了任務號、用戶和任務執行時間等信息。

# atq
8    2004-12-15 02:05 a mj

裏面的a表示是at任務還是batch命令生成的任務。

3. 刪除at任務
刪除一個at任務比較簡單,使用atrm命令就可以輕鬆解決。
比如我知道了任務的隊列號,那麼就可以刪除它:

# atrm 8

就刪除了隊列號爲8的at任務了。


三、batch命令處理批處理任務

這個具體就不說了,該命令類似 at -q b,詳細請參考下面的連接:

http://www.linuxts.com/doc/rhl-cg-zh_CN-9/s1-autotasks-at-batch.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章