执行定时任务
- 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 定时任务配置文件
/var/spool/cron/
- 这个目录下存放的是每个用户包括 root 的 crontab 任务;
- 每个任务以创建者的名字命名,比如tom建的crontab任务对应的文件就是/var/spool/cron/tom;
- 一般一个用户最多只有一个crontab文件。
/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,而不是新增