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