博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UNIX下的定时任务-----cron
阅读量:6805 次
发布时间:2019-06-26

本文共 2417 字,大约阅读时间需要 8 分钟。

hot3.png

cron是系统的主要进程调度进程(每隔一分钟被激活检查,其余时间休眠),通过读取crontab文件中的内容来定时执行任务
其中在unix下可以每一个用户拥有一个crontab文件
但为了管理员的方便,一般就一个。每一个用户是否有权限拥有crontab文件可以通过如下文件进行设置

cron.deny和cron.allow

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')

   #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

转载于:https://my.oschina.net/u/177429/blog/31831

你可能感兴趣的文章
AspectJ的基本使用
查看>>
python-常见快捷方式
查看>>
hdu6103 Kirinriki(trick+字符串)
查看>>
WebGL 3D 电信机架实战之数据绑定
查看>>
基于 HTML5 Canvas 的电信机柜 U 位动态管理
查看>>
C++11 function函数用法
查看>>
斐波纳契博弈
查看>>
oracle redo日志文件损坏恢复
查看>>
python 访问权限
查看>>
新手向-同步关键字synchronized对this、class、object、方法的区别
查看>>
樱道,空蝉,雨空,夏恋,雨道,彩月,幻昼,惊梦,白夜。这些纯音乐
查看>>
企业运维岗位笔试真题
查看>>
[翻译]通往T-SQL的楼梯
查看>>
Oracle计算时间差函数
查看>>
django-pure-pagination使用方法
查看>>
ubuantu 18.04 LTS 版本解决网易云安装启动问题
查看>>
Java分享笔记:泛型类的定义与使用
查看>>
springCloud全实战超详细代码demo+笔记
查看>>
Golang 知识点总结
查看>>
Bitmap
查看>>