UNIX下的定時任務-----cron

cron是系統的主要進程調度進程(每隔一分鐘被激活檢查,其他時間休眠),經過讀取crontab文件中的內容來定時執行任務
其中在unix下能夠每個用戶擁有一個crontab文件
但爲了管理員的方便,通常就一個。每個用戶是否有權限擁有crontab文件能夠經過以下文件進行設置

cron.deny和cron.allowlinux

cron中有一個crontab命令來對crontab文件進行相關操做:
-l 查看crontab文件內容
-u 用戶名 指定哪一個用戶的crontab文件
-e 編輯crontab文件
-r 刪除crontab文件
crontab filename提交做業文件
1:建立crontab文件
(1)首先肯定一個編輯器,對crontab文件進行編輯,通常是vi
設置以下:在$HOME下的.profile中增長以下:
EDITOR=vi;exportEDITOR
(2)建立一個文件,如test文件(通常是用戶名,不是用戶名也能夠)
如建立的文件內容以下:
cat $HOME/test
0,30 * * * * /bin/echo"test">/dev/console
(3)crontab test
提交的文件會在/var/spool/cron/目錄下一個文件中(這個文件名記爲用戶,那個用戶的crontab記爲那個用戶)

2:通常狀況下,最好不要直接操做/var/spool/cron/目錄下的crontab文件,這樣可能會由於操做問題,形成
更改crontab文件,而影響原來設置的cron任務
那麼怎麼辦呢,通常咱們經過編輯副原本編輯crontab文件
操做以下:
    (1)crontab -l >filename
    (2)經過編輯filename文件,增長或刪除定時任務
    (3)提交filename文件(這樣發現/var/spool/cron/目錄下一個文件已經改變成提交的那個啦,因此切勿更改錯誤哦)
    (4)刪除filename文件(或保留這個文件,以便你恢復使用。)
如下是我在使用crontab的一個例子,供你們參考:
crontab -l
# EDITE DO XXXXX
# (/home/test/daemon_crontab_1234 instatll on xxxx)
# version xxxxx
0,30 * * * * /home/test/project/bin/test --start >dev/null 2>&1
因爲每次執行crontab filename均會在上述文件中(linux系統下,其餘不會)增長上述相似的三行註釋來代表我修改的時間,版本信息等
故,我以下的程序作了,對於指定的任務,只有這麼三行代表我修改的時間和版本信息。故作了以下處理.
如下程序是曾經寫過的腳本,如今從新寫了下,但未調試,若是有錯,稍稍調整如下就沒有多大問題了。編輯器

#!/bin/ksh

main()
{
    username=$1
    type=$2
    project=$3 #$3項目的home目錄
    crontab_bak=/home/test/daemon_crontab_$$
    crontab_cp=/home/test/daemon_crontab_cp_$$ 
    crontab -l >crontab_bak
    project_temp=$(echo $project|sed 's/\//\\\//g')unix

   #awk -v project_temp=project { gsub(/\//,"\\\/",project_temp) print project_temp}
    awk 'BEGIN{
        status=0
        buff=""
     }
     index($0,"'$project'/project/bin/test --start") ==0 {
        if( status == -1 ){
            printf("%s",$0);
         }
         else if( status == 0 ){
            if( $0 ~ /^# EDITE DO XXXXX/ )
            {
                status =1;
                buff=sprintf("%s\n",$0);
            }
            else
            {
                status =-1;
                buff=sprintf("%s\n",$0);
 
            }
         }
         else if( status == 1 ){
            if( $0 ~ /^# \('$project_temp'\/daemon_crontab_1234 instatll on xxxx\)/ ){
                status =2;
                buff=sprintf("%s%s\n",buff,$0)
            }
            else
            {
                status =-1;
                printf("%s%s\n",buff,$0);
            }
         }else if( status == 2 ){
            if( $0 ~ /^# version xxxxx/ ){
                status =0;
                buff="";
            }
            else
            {
                status =-1;
                printf("%s\n",$0);
            }
         }

    
    
        }' $crontab_bak > $crontab_cp


}
if [ "x$type" = "xadd" ]; then
{
    echo "0,30 * * * * /home/test/project/bin/test --start >/dev/null 2>&1" >>$crontab_cp
    crontab $crontab_cp
}

if [ "x$type" = "xdelete" ]; then
{
     crontab $crontab_cp
}


rm -fr $crontab_cp
rm -fr $crontab_bak

main $@ 2>/dev/null調試

相關文章
相關標籤/搜索