linux shell:crontab,at,nohup 命令

當在終端或控制檯工作時,可能不希望由於運行一個作業而佔住了屏幕,因爲可能還有更重要的事情要
做.因此有幾種選擇方法可供使用:
設置crontab文件,並用它來提交作業
使用at命令來提交作業
在後臺提交作業
使用nohup命令提交作業
名詞解釋:
cron:系統調用進程,可以使用它在每天的非高峯負荷時間段運行作業,或在一週或一月中的不同時段
運行.
at:at命令.使用它在一個特定的時間運行一些特殊的作業,或在晚一些的非負荷高峯時間段或高峯負
荷時間段運行.
&:使用它在後臺運行一個佔用時間不長的進程.
nohup:使用它在後臺運行一個命令,即使在用戶退出時也不受影響.
1.cron和crontab
    cron是系統主要的調度進程,可以在無需人工干預的情況下運行作業.有一個叫做crontab的命令
允許用戶提交,編輯或刪除相應的作業.每一個用戶都可以用一個crontab文件來保存調度信息.可以使
用它運行任意一個shell腳本或命令,每小時運行一次,或一週三次.每一個用戶都可以有自己的
crontab文件,但在一個較大的系統中,系統管理員一般會禁止這些文件,而只在整個系統保留一個這樣
的文件,系統管理員是通過cron.deny和cron.allow這兩個文件來禁止或允許用戶擁有自己的crontab
文件.
1.1 crontab的域
    爲了能夠在特定的時間運行作業,需要了解crontab文件每個條目中各個域的意義和格式:
    第1列: 分鐘 1-59
    第2列: 小時 1-23
    第3列: 日   1-31
    第4列: 月   1-12
    第5列: 星期 0-6 (0表示星期天)
    第6列: 要運行的命令
    下面是crontab的格式:
    分<>時<>日<>月<>星期<>要運行的命令
    crontab文件的一個條目是從左邊讀起的,第一列是分,最後一列是要運行的命令,它位於星期的後
面.
    在這些域中,可以用橫槓-來表示一個時間範圍,例如希望星期一至星期五運行某個作業,那麼可以
在星期域使用1-5來表示,還可以在這些域中使用逗號",",例如希望星期一和星期四運行某個作業,只
需要使用1,4來表示.可以用星號*來表示連續的時間段,如果對某個表示時間的域沒有特別的限定,也
應該在該域中填入*.該文件的每一個條目必須含有5個時間域,而且每個域之間要用空格分隔.該文件
中所有的註釋行要在行首用#來表示.
1.2 crontab條目舉例
    30 21 * * * /apps/bin/cleanup.sh
    表示每天晚上21:30運行/apps/bin/cleanup.sh這個文件
    45 4 1,10,22 * * /apps/bin/backup.sh
    表示每月1,10,22日的4:45分運行/apps/bin/backup.sh這個文件
    10 1 * * 6,0 /bin/find -name "core" -exec rm {} /;
    表示每週六,日的1:10運行一個find命令並刪除core文件.
    0,30 18-23 * * * /apps/bin/dbcheck.sh
    表示每天18:00至23:00之間每隔30分鐘運行/apps/bin/dbcheck.sh這個文件
    0 23 * * 6 /apps/bin/qtrend.sh
    表示每週六的23:00運行/apps/bin/qtrend.sh這個文件
1.3 crontab命令選項
    crontab命令的一般形式爲:
    crontab [-u user] -e -l -r
    -u 用戶名
    -e 編輯crontab文件
    -l 列出crontab文件中的內容
    -r 刪除crontab文件
    如果使用自己的名字登錄,就不用使用-u選項,因爲在執行crontab命令時,該命令能夠知道當前用
戶.
1.4 創建一個新的crontab文件
    在考慮向cron進程提交一個crontab文件之前,首先要做的一件事情就是設置環境變量
EDITOR.cron進程根據它來確定使用哪個編輯器編輯crontab文件.
    創建一個davecron文件,在該文件中加入如下的內容
    0,15,30,45 18-06 * * * /bin/echo `date` >> /root/tanjun
    保存並退出.然後再運行
    crontab davecron
    現在該文件已經提交給cron進程,它將每隔15分鐘運行一次.
    同時,新創建文件一個副本已經被放在/var/spool/cron/目錄中,文件名就是用戶名.
1.5 列出crontab文件
    爲了列出crontab文件,可以用:
    crontab -l
1.6 編輯crontab文件
    如果希望添加,刪除或編輯crontab文件中的條目,而EDITOR環境變量又設置爲vi,那麼就可以使用
vi來編輯crontab文件,相應的命令爲:
    crontab -e
    可以像使用vi編輯其它任何文件那樣修改crontab文件並退出.
1.7 刪除crontab文件
    crontab -r

2.at命令
    at命令允許用戶向cron守護進程提交作業,使其在稍後的時間運行.一旦一個作業被提交,at命令
將會保留所有當前的環境變量,包括路徑.該作業的所有輸出都將以電子郵件的形式發送給用戶,除非
對其輸出進行了重定向,絕大多數情況下是重定向到某個文件中.
    和crontab一樣,根用戶可以通過/etc/目錄下的at.allow和at.deney文件來控制哪些用戶可以使
用at命令,哪些用戶不行.
    at命令的基本形式爲:
    at [-f script] [-m -l -r] [time] [date]
    -f script 是所要提交的腳本或命令
    -l 列出當前所有等待運行的作業, atq命令具有相同的作用
    -r 清除作業,爲了清除某個作業,還要提供相應的作業標識(ID)
    -m 作業完成後給用戶發郵件
    time at命令的時間格式非常靈活,可以是H,HH.HHMM,HH:MM或H:M,其中H和M分別是小時和分鐘,還
可以使用a.m和p.m
    date 日期格式可以是月份或日期數,而且at命令還能夠識別諸如today,tomorrow這樣的詞
2.1 使用at命令提交命令或腳本
    使用at命令提交作業有幾種不同的形式,可以通過命令行方式,也可以使用at命令提示符.一般來
說在提交若干行的系統命令時,使用at命令提示符方式,而在提交shell腳本時,使用命令行方式.
    如果想提交若干行命令,可以在at命令後面跟上日期/時間並回車.然後就進行了at命令提示符,這
時只需要逐條輸入相應的命令,然後按<ctrl+d>退出.
    at 21:10
    at> find / -name "passwd" -print
    at> EOF
    其中EOF就是<CTRL+D>,在21:10系統將執行一個簡單的find命令
    如果希望向at命令提交一個shell腳本,使用其命令行方式即可.在提交腳本時使用-f選項.
    at 3.00pm tomorrow -f /apps/bin/db_table.sh
    該命令將在明天下午3:00運行.
2.2 列出所提交的作業
    一個作業被提交後,可以使用at -l命令來列出所有的作業
2.3 清除一個作業
    清除作業的命令格式爲:
    atrm [job no] 或 at -r [job no]
    如:
    atrm job 3
3.&命令
    當在前臺運行某個作業時,終端被該作業佔據,而在後臺運行作業時,它不會佔據終端.可以使用&
命令把作業放到後臺執行.
    該命令的一般形式爲:
    命令 &
3.1 殺死後臺進程
    如果想殺死後臺進程可以使用kill命令.
4.nohup命令
    如果正在運行一個進程,而且覺得在退出帳戶時該進程還不會結束,那麼可以使用nohup命令,該命
令可以在你退出帳戶之後繼續運行相應的進程.nohup就是不掛起的意思.
    該命令的一般形式爲:
    nohup command &
4.1 使用nohup命令提交作業
    如果使用nohup命令提交作業,那麼在缺省情況下該作業的所有輸出都被重定向到一個名爲

nohup.out的文件中,除非另外指定了輸出文件.
    nohup command > myout.file 2>&1
    輸出被重定向到myout.file文件中.

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