定时任务Cron

  Linux系统中的定时任务cron,一个很实际很有效很简单的一个工作,在日常的生产环境中,会被广泛使用的一个组件。通过设置时间、执行的脚本等内容,能够让系统自动的执行相关任务,很是方便。

  cron定时任务,在系统中能够执行,需要有一个依赖的服务,也就是crond定时任务服务,该服务默认情况下是开机自启动的,通过命令chkconfig 可以查看,设置开机启动的命令,chkconfig crond on。

  在为系统用户创建定时任务时,默认会在/var/spool/cron/目录下,创建以系统用户用户名为名称的文件,在该文件中记录了用户设置的定时任务。定时任务的执行,该用户必须存在于系统中。

  通过命令crontab -l,可以查看当前用户设置的定时任务,如果要查看其它用户设置的定时任务,可以是crontab -lu username,crontab -e是用来设置用户的定时任务,实际上也就是编辑/var/spool/cron/下的文件。

  cron定时任务,在编写定时任务时,也是有固定格式的,时间+执行的命令。具体可以看看cron的帮助信息,或者查看crontab文件内容。

 1 [bobo@localhost ~]$ cat /etc/crontab 
 2 SHELL=/bin/bash
 3 PATH=/sbin:/bin:/usr/sbin:/usr/bin
 4 MAILTO=root
 5 HOME=/
 6 
 7 # For details see man 4 crontabs
 8 
 9 # Example of job definition:
10 # .---------------- minute (0 - 59)
11 # |  .------------- hour (0 - 23)
12 # |  |  .---------- day of month (1 - 31)
13 # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
14 # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
15 # |  |  |  |  |
16 # *  *  *  *  * user-name command to be executed

  这里详细说明了定时任务的写法,分钟、小时、日期、月份、星期,定义了5个时间参数之后,后面是要执行的用户命令,默认情况下,系统会每分钟检查定时任务是否要执行,执行后会给该定时任务的属主发送mail。在日期填写中,有特殊字符,比如*表示任意的某个时间点,在5个时间设置位上,表示任意分钟、任意小时等等,也就是任意,如果是*/n,表示每n个单位,比如每5分钟,*/5。下面,我们写几个定时任务,测试一下。

  使用普通用户,创建定时任务,每分钟向自己家目录下的文件中增加一条日志记录。

  首先,先测试一下命令是否可用,看是否能正常执行

 1 [bobo@localhost ~]$ echo this is a cron task >>$HOME/crontask
 2 [bobo@localhost ~]$ cat /home/bobo/crontask 
 3 this is a cron task
 4 [bobo@localhost ~]$ echo `date ` this is a cron task  
 5 Thu Mar 15 09:04:08 CST 2018 this is a cron task
 6 [bobo@localhost ~]$ echo `date ` this is a cron task >> $HOME/crontask
 7 [bobo@localhost ~]$ cat ~/crontask 
 8 this is a cron task
 9 Thu Mar 15 09:06:11 CST 2018 this is a cron task
10 [bobo@localhost ~]$ 

  然后将命令写入文件中,可以通过crontab -e或者vim /var/spool/cron/username,进行编辑,然后通过crontab -l进行查看

1 [bobo@localhost ~]$ crontab -l
2 */1 * * * * echo `date` crontask runing >>$HOME/crontask

  我们可以通过tail -f 查看该文件的变化,每隔1分钟,会增加一行内容记录

  这样,就可以说明,定时任务在正常执行。

定时任务书写规范

  1、在编写定时任务时,需要为定时任务增加注释,让其他人知道,这个定时任务是谁写的,作用是什么。在crontab -e中,注释以#开头

  2、在编写定时任务时,尽量用命令去执行,把要执行的命令写入到shell脚本中,然后通过sh执行,然后将输出结果写入空设备,将错误结果输出到空设备中,具体写法是 1>/dev/null  2>&1,如果不这么写,由于系统每次运行一次定时任务,就会给root用户发送一封邮件,当系统没有开启邮件服务的时候,会在邮件maildrops目录中生产大量的小文件,这样的小文件,虽然不会占用系统多大的容量,但是会占用系统大量的inode,当系统的inode耗尽时,系统将无法再次写入文件。

  当启用了postfix应用之后,改目录会迅速发送完成,不再占用。

   

   所以,对于之前写的那个定时任务,优化下,建立一个sh文件,将要执行的命令,写入到sh文件中,然后在cron定时任务中,写入注释。

  

  

   

  

猜你喜欢

转载自www.cnblogs.com/bobo137950263/p/8564644.html