您的位置:首页 > 运维架构 > Linux

Linux--系统周期性计划任务crond

2017-08-14 07:21 381 查看
****************************************************************************************************************************************************************************************

       在程序运行过程中,我们需要定期的利用程序做一些事情,比如检测程序是否运行,运行是否正常,定期统计用户访问量,收集或者采集程序数据,....这些工作可能需要在正常工作时间进行,也有可能是在深夜执行,所以如果人工进行操作的话,会有诸多的不便,导致工作进度难以推进,这时就可以试试设置周期性计划任务。

       1.cron介绍:周期性计划任务,即cron。是一个可以用来根据时间、日期、月份、星期的组合来调度对周期性任务执行的守护进程

       利用cron所提供的功能,可以将需要周期性重复执行的任务设置为cron任务,并且设置为在主机较空闲的时间(如夜间)自动完成

       CentOS中实现cron功能的软件包组成。

       这就是对cron的定义,首先cron是一个守护进程,在之前文章中已经提到,进程分为两类,其中之一是守护进程,既然cron属于守护进程,那么它也就具有守护进程的一切特性,随系统的启动而启动,随系统的关闭而关闭;无界面,时刻在后台运行。当然它也有自己的特性,可以将重复执行周期性的任务,非常便于开发人员管理程序。

       crontabs软件包实现对Linux系统的定时任务管理功能

       2. cron任务的格式

            * * * * * 脚本 ,这是cron任务的通用格式,

           五个* 分别代表 min 、 hour、day 、month 、dayofweek、command

           具体解释如下:

           min   分钟,取值为从0到59之间的任意整数

           hour 小时,取值为从0到23之间的任意整数

           day   日期,取值为从1到31之间的任意整数,当然有的月份没有31或30或29,也没有关系,这个系统会根据当前的系统时间在取值。

          month 月份,取值为从1到12之间的任意整数

          dayofweek 星期,取值为从0到7之间的任意整数,0或7代表星期日

          command 要执行的命令或程序脚本

         
具体的例如,40 4 3 2 5 run_yearly_cmd  表示在2月3号周五这一天的4点,40分,去执行run_yearly_cmd这一程序,如果不设置的话,可以              用* 代替。

      3.使用crontab命令进行设置

        查看用户的cron任务     #crontab -l

        编辑用户的cron任务

             1)编辑并覆盖原有的cron任务 # crontab

             2)调用文本编辑器对cron任务进行编辑

        crontab -e

        删除用户现有的cron任务

        #crontab -r 

        下面对crontab命令的设置进行举例说明:

         先对目前系统内的cron进行查询:

         


       显示当前没有cron任务在运行,那我们接下来先创建一个cron任务,输入crontab
-e命令,打开的虽然一个文本编辑器,但是调用的是vi编辑器,必须使用vi的语法才能正常执行:

         


       为了演示方便,我们就写一个简单的程序,设置一个程序,每分钟执行一次,并将输出的内容重定向到zhao555.txt文件中:

 


         保存退出,然后再查看cron任务:

          


       可以看到显示出有一个cron任务需要执行,因为我们用的是">>"重定向,所以程序会从第二次执行之后,将打印出来的信息,依次追加到上一条信息后面。接着我们重启cron任务,我们先来试一下reload:

        


       
使用reload重新载入成功。(如果载入失败,需要使用restart命令,进行重启)

        


       
在根目录下查询:


      zhao555.txt文件已经生成,也就意味着我们的cron任务已经执行...

       


       
上图为输出打印的结果,可以看出,cron程序设置是没有问题的,已经在正常运行。现在只是为了演示,程序设置的非常简单,如果在开发过程           的,就必须根据需求来进行时间的设置。

         (二)以上我们是在管理员状态下运行,加入现在有多个用户都需要使用cron进行设置,那cron任务就会显得非常的混乱,那怎么样才能有效管理            呢?

         先把之前设置的cron任务删除掉,

        


        需要强调的是,修改完配置文件之后,守护进程必须要重启,设置才会生效,否则还是会保持之前的运行状态。

        


       
我们先创建两个用户zhaowu,zhaoliu,并且设置密码:

          


         我用zhaowu,zhaoliu这两个账号登陆进去后,都可以对crond任务进行操作,因为系统默认所有新创建的用户,都可以使用crontab:

          


          


         不过这样就很容易导致crond任务混乱。

        这样就必须要进行管理才行,怎么管理?需要管理员进行设置:

        在etc目录下,编辑cron.deny文件,如果不想让zhaowu使用crond任务,在文件中直接编辑zhaowu这个用户名名称即可:

 
          


            保存退出,分别对zhaowu、zhaoliu两个用户账号进行验证:

 
           


 
           


           
可以看到,zhaowu这个账号已经无法在对crond任务进行设置了,而zhaoliu账号还是可以编辑crond任务的。

            现在管理员账户下创建一个crond任务:

             


           使用zhaoliu 账户对crond任务进行查看,显示没有zhaoliu的crond任务进行,并且它也没有启动crond服务的权限,只能查看
              service的状            态:

 
           


 
          


         因为zhaoliu这个用户本身就是第三用户,根本就不会有调用系统管理的功能的权限。所以如果修改配置之后,想要重新启动
         crond,就必须          要把service的路径全写出来,才可以执行,接下来我们来看一下:

         先来创建一个zhaoliu的crond任务:

 
        


 
        


         
使用service全路径提示没有权限,这个时候怎么办?之前讲过sudo 命令,sudo的作用就是借用管理用的密码,帮助用户来实         现一些只有             管理员才有的权限设置:

 
        


        
在visu文件中进行配置:

 
        


 
        


        设置好之后,重新登录zhaoliu账号,并执行重启service命令:

 
        


         crond任务重启成功!

         查询并查看结果:

 
       


       zhaoliu账户下的crond运行正常!

       另外还有一点:每一个账户下的crond都是独立的,也就是zhaoliu账户下创建的crond,在zhaowu账户下是看不到的。

       这些就是系统周期性任务了!

 
     


****************************************************************************************************************************************************************************************
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息