创建周期性计划任务cron

简介:

创建周期性计划任务cron

 

目 录


一、周期性任务计划: cron

二、系统计划任务

三、用户创建计划任务

四、控制用户执行计划任务


本篇中主要从具体的实例中说明怎样创建计划任务



一、周期性任务计划: cron

    (1)计划周期性执行的任务提交给crond,到指定时间会自动运行

系统cron任务:系统维护作业

    (2)相关的程序包:默认已安装

         使用 rpm –qi cronie  查看相关包具体信息

    cronie: 主程序包,提供crond守护进程及相关辅助工具

    cronie-anacron cronie的补充程序,用于监控cronie任务执行状况,如cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务

    crontabs:包含CentOS提供系统维护任务

    (3)要确保crond守护处于运行状态:查看crond服务是否启动

    CentOS 7:

    systemctl status crond   查看是否启动

    systemctl start  crond   启动方法

    CentOS 6:

    service crond status查看是否启动

    service crond start  启动方法

4)系统cron任务:系统维护作业

/etc/crontab    将计划任务写入该文件

用户cron任务:

crontab命令     使用crontab命令创建

5日志监控计划任务: /var/log/cron    监控计划任务

二、系统计划任务

     (1)查看任务  vim  /etc/crontab

wKioL1m03fWQNUwfAABWd-hqNAA406.png

    (2)例子1:工作日时间,每10分钟执行一次磁盘空间检查,一旦发现任何分区利用率高于80%,就执行wall警报

          vim  /etc/crontab

    wKioL1m03guSGNTXAAALnKN9Erk076.png

        1、解释:第1位 */10 表示每10分钟执行一次(注意,*/#这里#仅限能被60 整除的数,如 */12 表示每12分执行一次)

                   2  * 小时,*代表每个小时都要执行,2代表凌晨两点执行,20代表晚上8点执行(24小时制) 

        第3  *日,*代表每天执行,表示每月4号执行。20代表每月20号执行(1-31天)

        第4  *月,*代表每月都执行,1代表一月,2代表2 1-12月)

        第5  *星期几,*代表任意一天,1表示星期一,(0-70和都表示星期日)

        第6   root  表示执行人是root 

        第7   /bin/root/checkdisk.sh   执行的操作,可以是一条命令,也可以是脚本名称,注意这里写上完整的路径。

     2、注意:这里的第3位:天与第5位:星期几会产生冲突,如第3位写的20 ,第5位写的,而20号这天不是星期三,那么怎样执行呢。这里采取或关系,即20号这天执行,星期三也执行,其他各个位上的关系是与关系。

    3、分析:在工作日时间,即周一到周五,可以在第五位写1-51,2,3,4,5可以 1-3,4,5也可以),但是第3位天上该怎样写呢,两者是或关系,如果第三位写上*代表每一天都执行,包括周六,周日。那总不可能看看日历算一算吧,毕竟每个月都不一样。所以我把每个位上都写了*,那么上面就表示,每天每10分钟root执行一次/bin/root/neicun.sh这个脚本,那么判断星期几可以在脚本中判断,如果是周一到周五,执行任务,如果周六周日,什么也不做,不就满足要求了。

    4、代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
# ------------------------------------------
# Filename:checkdisk.sh
# Revision: 1.0
# Date: 2017-9-9
# Description: check cipan 80%
# ------------------------------------------
# 定义变量以数字方式显示出星期几
week=` date  +%w`
# 找出磁盘利用率最大的值
max=` df | egrep  "^/dev/sd.*"  | egrep  -o "[0-9]+%" | cut  -d% -f1| sort  -nr| head  -n1`
#判断星期几的数是否小于6,即周一到周五,如果不是,退出不执行。如果是,则判断磁盘利用率最大的值是否大于80,如果大于,则广播,如果小于则退出
if   [ $week-lt 6 ] ; then
      if  [$max -gt 80 ]; then
       wall  "the diskspace willfull"
      else
          exit
      fi
else
       exit
fi
#释放变量,是个好习惯。
unset  week max

注意:(1)没有被重定向的输出会被邮寄给用户

2)根用户root能够修改其它用户的作业

3)运行结果的标准输出和错误以邮件通知给相关用户

   执行的命令结果最好导入垃圾桶中

COMMAND &> /dev/null

4)对于cron任务来讲, %有特殊用途;如果在命令中要使用%,则需要转义,将%放置于单引号中,则可不用转义

  建议将执行的操作写入脚本中,不要直接写在/etc/crontab

5)命令在写入脚本或者/etc/crontab之前,建议先做测试

(6)这里写完脚本后要把脚本加上执行权限,chmod +x checkdisk.sh(脚本名)

三、用户创建计划任务

(1)用户cron:

crontab命令定义,每个用户都有专用的cron任务文件:  /var/spool/cron/USERNAME 

crontab命令:本身有suid   权限

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

-l: 列出所有任务;

-e: 编辑任务;                               

 * * * * * wall I am 

-r: 移除所有任务;

-i:同-r一同使用,以交互式模式移除指定任务

-u user: root可运行,指定用户管理cron任务 

                               crontab –e –u wang

(2)例子1:普通用户guan 每分钟广播一次I am guan

         切换到guan 用户下 su – guan


wKiom1m05VrRXa39AAAKWcahJSQ456.png

wKioL1m05UHxz9a8AAAKkAlmbHA529.png

  切换到root用户下,su – root ,进入/var/spool/cron/ ,可以看到guan用户创建的任务,当然root用户可以修改和删除普通用户的计划任务。

    wKiom1m05XGhMyYsAAAgkL1hhUY803.png

四、控制用户执行计划任务

    控制用户执行计划任务:   /etc/cron.{allow,deny}

       白名单: /etc/cron.allow 默认不存在,只有该文件中的用户才能执行crontab命令

       黑名单:/etc/cron.deny 默认存在,拒绝该文件中用户执行crontab命令, 而没有在cron.deny 文件中的使用者则可执行

     如果两个文件都不存在,只有root 可以执行 crontab 命令

           解释:先看/etc/cron.allow文件,如果有,则只看/etc/cron.allow文件,只有/etc/cron.allow中的用户才能执行,如果没有该文件,则查看/etc/cron.deny文件。/etc/cron.deny中的用户之外的用户都可以创建cron任务,如果两个文件都不存在,则仅root可以创建cron任务。



        


 本文转自 hawapple 51CTO博客,原文链接:http://blog.51cto.com/guanm/1964107




相关文章
crontab 定时任务
crontab 定时任务
|
6月前
|
Linux Shell 开发工具
什么是crontab定时任务?
定时任务在Linux系统中用的是比较多的,个人的话一般用的很少,在企业中定时任务是必不可少的,定时任务多种多样,有程序的定时任务,比如:写一个程序在程序内定时执行,或者是操作系统的定时任务,比如:Windows系统的定时任务、Linux系统的定时任务,他们的名称、操作方式都不相同,但是他们都有一个共同的特征,在**某个特定的时间或者时间段执行某项任务**,这类通常被我们称之为定时任务,再举个例子,我们手机的闹钟、或者街边的路灯,这些都是定时任务,闹钟会在早上7点发出音乐,路灯会在晚上6点开灯,这些都是生活中的定时任务,今天记录一下在Linux系统中如何使用定时任务
什么是crontab定时任务?
|
Unix Linux Shell
cron设置定时任务详解
cron设置定时任务详解
crontab安装以及定时任务的执行
crontab安装以及定时任务的执行
139 0
|
监控
crontab设置作业间隔执行问题
这个源于有个网友问,crontab里   */40  9  *  *  *  是不是代表9点开始每40分钟执行?  直觉这个肯定不是从9:00开始每隔40分钟执行一次,但是也不能肯定它代表一个什么样的Schedule,那就做一个实验验证一下吧(有时候明明觉得自己已经掌握了一些知识点,但是总有一些问题,你不能很确切、肯定的回答,其实说明了还有盲点,知识点了解、掌握得不够彻底)。
887 0
|
程序员 数据库
at,crontab定时程序
介绍 程序员对于定时执行任务一定不陌生,很多任务为了减少对用户的干扰,如系统更新、维护、数据库结构变更等,通常会选择在凌晨进行。对于一些简单的无需人工照看的任务,就可以预先写好命令,并设定时间自动运行,然后就可以安心睡大觉了。
1026 0
|
Shell 调度 数据安全/隐私保护
|
Shell PHP 关系型数据库