美文网首页
Linux定时任务(1)— crontab

Linux定时任务(1)— crontab

作者: 枫林风雨 | 来源:发表于2018-12-14 12:29 被阅读13次

执行定时任务
  • crontab 执行循环任务
  • at 执行一次性任务

crontab简介

Linux 系统有个 crond 程序,对应 cron 这个守护进程[ps -ef |grep cron]。它在系统中会每分钟扫描定时任务,读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为“crontab”,是“cron table”的简写。crontab命令用于安装、删除或者列出用于驱动cron后台进程的表格。用户把需要执行的命令序列放到crontab文件中以获得执行。

每个用户都可以有自己的crontab文件。/var/spool/cron下的crontab文件不可以直接创建或者直接修改。该crontab文件是通过crontab命令创建的

crontab -u username -e    #创建定时任务, 

-u #后面跟创建此任务的用户名
-e #是进入编辑任务
-r #删除定时任务
-l #查看定时任务

1、crontab服务控制
service crond start    //启动服务
service crond stop     //关闭服务
service crond restart  //重启服务
service crond reload   //重新载入配置
service crond status   //查看服务状态
2、查看 crontab 定时任务配置文件
  1. /var/spool/cron/
  • 这个目录下存放的是每个用户包括 root 的 crontab 任务;
  • 每个任务以创建者的名字命名,比如tom建的crontab任务对应的文件就是/var/spool/cron/tom;
  • 一般一个用户最多只有一个crontab文件。
  1. /etc/crontab
  • 这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab。
  • cat /etc/crontab查看内容如下:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root 
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

内容说明
  • MAILTO=root 是说,当 /etc/crontab 这个档案中的例行性命令发生错误时,会将错误讯息或者是屏幕显示的讯息传给谁?由于 root 并无法再用户端收信,因此,通常都將这个 e-mail 改成自己的账号,好让我随时了解系统的状态!
  • “*”代表取值范围内的数字, “/”代表”每”, “-”代表从某个数字到某个数字, “,”分开几个离散的数字
    在 “分 时 天 月 周 命令“ 这些字段里,除了“命令”是每次都必须指定的字段以外,其它字段皆为可选,视需要决定。对于不指定的字段,要用“*”来填补其位置。 举例如下:
minute (0-59) hour (0-23) day (1-31) month (1-12) OR jan,feb,mar,apr ... day of week (0-6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
*/15(每15分钟) 6(每天6点) 10,20(每月10号及20号) 8(每年的8月) 0 (每个星期天)
每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。
5 * * * * ls  #指定每小时的第5分钟执行一次ls命令     
30 5 * * * ls  # 指定每天的 5:30 执行ls命令     
30 7 8 * * ls  #指定每月8号的7:30分执行ls命令    
30 5 8 6 * ls  #指定每年的6月8日5:30执行ls命令    
30 6 * * 0 ls  # 指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,
30 3 10,20 * * ls  #每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]
25 8-11 * * * ls  #每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]
*/15 * * * * ls  #每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令]
30 6 */10 * * ls  # 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls 命令。                  
50 7 * * * root  #每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件。
3、创建一个定期命令

第一种:crontab -u username -e 系统自动打开vi编辑器,输入需要执行的定时任务。如果出现如下提示:crontab: must be privileged to use -u ,请使用 sudo 执行。示例如下:

`* */2 * * * root rm /var/log/test/* `

第二种:用编辑文件的方式来创建定期命令,在/etc/cron.d/filename 下创建一个文件,vi 打开编辑文件的位置: /etc/cron.d/filename 。/etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。

4、查看任务、删除任务
crontab -l  #查看任务
crontab -u root -r  #删除任务
5、定时任务创建权限的设定

方式:编辑文件

/etc/crond.deny   #编辑cron 创建定期任务的黑名单
/etc/crond.allow   #编辑cron 创建定期任务的白名单

系统默认没有白名单,可以自己创建,注意,创建后,只有白名单上的用户才又权限创建任务。

6、创建cron脚本

第一步:写cron脚本文件,命名为crontest.cron,内容如下:

15,30,45,59 * * * * echo "xgmtest....." >> xgmtest.txt 

表示,每隔15分钟,执行打印一次命令
第二步:添加定时任务。执行命令 “crontab crontest.cron”,搞定 。
第三步:"crontab -l" 查看定时任务是否成功或者检测/var/spool/cron下是否生成对应cron脚本
注意:这操作是直接替换该用户下的crontab,而不是新增

相关文章

网友评论

      本文标题:Linux定时任务(1)— crontab

      本文链接:https://www.haomeiwen.com/subject/mzawhqtx.html