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调试

相关文章
相关标签/搜索