天天看點

UNIX背景執行指令

指令解釋:

    cron  系統排程程序,可以使用它在每天的非高峰負荷時間段運作作業

    at    at指令,使用它在一個特定的時間運作一些特殊的作業

    &     使用它在背景運作一個占用時間不長的程序

    nohup 使用它在背景運作一個指令,即使在使用者退出時也不受影響

cron/crontab:

    cron是系統主要的排程程序,可以在無需人工幹預的情況下運作作業

    crontab的指令允許使用者送出、編輯和删除相應的作業。每一個使用者都有自己的crontab檔案,系統管理者可以通過cron.deny和cron.allow這兩個檔案來禁止和允許使用者擁有自己的crontab檔案

crontab檔案的格式: 分<>時<>日<>月<>星期<>要運作的指令

    <>表示空格,日期可用-表示某個時間段, 用*表示任意條件,用“,”表示或條件

    例:30 21 * * * /apps/test.sh       每晚21:30運作/apps/test.sh

       45 4 1,10,22 * * /apps/test.sh  每月1、10、22日4:45運作/apps/test.sh

       0,30 18-23 * * 6,0 /bin/find -name "core" -exec rm {} /;

                      每個星期六、日的18點到23點,每隔30分鐘運作一次find并删除

    每個指令都需要給出絕對路徑,注意環境變量,cron不知道一些特殊的變量

crontab指令的格式:

    crontab [-u user] -e -l -r

    -u 使用者名  -e 編輯crontab檔案  -l 列出crontab檔案中的内容  -r 删除crontab檔案

建立一個新的crontab檔案:

    在考慮向cron程序送出一個crontab檔案之前,首先要做的是設定環境變量EDITOR,因為99%的UNIX和LINUX使用者都使用vi,是以可以編輯$HOME目錄下的.profile或.bash_profile,加入一行:

        EDITOR=vi; export EDITOR;

    編輯檔案<user>cron,内容為0,15,30,45 18-06 * * * /bin/echo `date` > /dev/console

    表示每隔15分鐘向控制台輸出一次目前時間,這樣系統崩潰的時候,可以通過檔案看出來

    然後使用 crontab usercron送出給cron程序,同時副本存放在/var/spool/cron目錄中

at指令:

    at指令會保留所有目前的環境變量,包括路徑,不像crontab,隻提供預設的環境

    通過/etc目錄下的at.deny和at.allow檔案來控制哪些使用者可以使用at指令

    指令格式: at [-f script] [-m -l -r] [time] [date]

    -f script 是所要送出的腳本或指令

    -l 列出目前所有等待運作的作業,atq指令具有相同的作用

    -m 作業完成後給使用者發送郵件

    -r 清除作業,清除時需要提供作業辨別(ID),有的系統使用atrm來清除

    time at指令的時間格式非常靈活,可以是H、HH.HHMM、HH:MM或H:M,還可以使用a.m.或p.m.

    date 日期格式可以是月份數或日期數,而且還能識别比如today,tomorrow這樣的詞

at指令的送出:

    $at 21:10

    at> find / -name "passwd" -print

    at> <EOT>   (這個<EOT>就是ctrl+D,表示退出)

    warning: commands will be executed using /bin/sh

    job 1 at 2005-01-01 21:10

    送出的作業被配置設定了一個唯一的辨別 job 1

    at時間還可以是:at 6.45am May 12、at 11.10pm、at now + 1 hour、

                 at 9am tomorrow、at 15:00 May 24、at now + 10 minutes

    如果是送出一個腳本,如: at 3.00pm tomorrow -f /apps/test.sh

    還可以通過管道符,如:echo find /etc -name "passwd" -print |at now + 1 minutes

    列出所有的at作業: at -l  并且可以在/var/spool/at/下找到這些作業檔案

    清除作業:  atrm [job bo]   或 at -r [job no],如 at -r job 3

&指令:

    使用這個指令可以解放出終端接着做别的事情,但是需要使用者互動的程式就不能放在背景

    格式: 程式/指令 &    注意标準輸出一樣會顯示在螢幕上,可以使用重定向方法解決

nohup指令:

    格式: nohup command &     這樣在這個使用者退出之後,程序一樣會繼續運作,不會中斷

    使用這個指令,預設該作業的輸出都會定向到一個名為nohup.out的檔案中