一、什么是计划任务?
脚本:帮助我们去完成某些事情的工具
计划任务:帮助我们提前计划某个时间点去执行脚本或某个任务,不需要人定时定点去执行,提升了工作效率,解放了人力
计划任务背后的crond进程:
crond守护进程:一直在内存里运行的进程,除非人为停止,不然会一直运行,crond服务会每隔1分钟去检查linux系统里的所有用户的计划任务。不论用户是否登录,它的计划任务都会执行,crond进程会到/var/spool/cron目录下检查用户的计划任务文件,然后执行
service crond stop --> 停止crond服务
service crond start --> 开启crond服务
service crond restart --> 重启crond服务
anacron服务:
弥补cron在系统关机后不能执行计划任务的问题,等系统开机后将没有执行的计划任务执行一遍,执行后anacron就会自动停止
不能代替cron
二、格式
时间范围:
字段 | 说明 |
分钟 | 取值为从0到59之间的任意整数 |
小时 | 取值为从0到23之间的任意整数 |
日期 | 取值为从1到31之间的任意整数 |
月份 | 取值为从1到12之间的任意整数 |
星期 | 取值为从0到7之间的任意整数,0或7代表星期日 |
命令 | 要执行的命令或程序脚本 |
时间数值的特殊表示方法:
- * 范围内的任意时间
- , 间隔的多个不连续时间点
- - 一个连续的时间范围
- /n 指定间隔的时间频率
示例:
0 17 * * 1-5 周一至周五每天下午5点整
30 8 * * 1,3,5 每周一、三、五早上8点半
0 8-18 * * * 每天上午8点到下午6点整
0 12 */3 * * 每隔三天的中午12点整
三、定制计划任务
计划任务相关命令:
- crontab -e:编辑计划任务
- crontab -l :查看计划任务
- crontab -u 用户名 -e:编写某个用户的计划任务
示例:
[root@localhost ~]# crontab -e
第一步:按i进入计划任务的编辑模式,输入计划任务
第二步:按ECS退出编辑模式,输入:wq退出并保存计划任务
[root@localhost ~]# crontab -l
01 05 * * * bash /backup/backup_log.sh
删除计划任务的方法:
- 输入crontab -e编辑计划任务,注释想要删除的计划任务
- 删除对应文件
四、计划任务的相关文件
配置文件:/etc/crontab
日志文件:/var/log/cron --查看日志文件可以知道计划任务是否执行
操作系统自身需要的计划任务:
- /etc/cron.d --存放计划任务的目录
- /etc/cron.daily --存放每天需要执行的任务
- /etc/cron.hourly --存放每小时需要执行的任务
- /etc/cron.weekly --存放每周需要执行的任务
- /etc/cron.monthly --存放每月需要执行的任务
存放每个用户的计划任务文件:/var/spool/cron/用户名
[root@localhost ~]# cd /var/spool/cron
[root@localhost cron]# ls
root #tmp.sanchuang.XXXXqCNl0G xiaoyang
[root@localhost cron]# cat root --查看root用户的计划任务
01 05 * * * bash /backup/backup_log.sh
[root@localhost cron]# cat xiaoyang --查看xiaoyang用户的计划任务
55 23 * * 0 cp /etc/passwd /home/xiaoyang/pwd.txt
黑客埋雷的位置有linux系统本身的计划任务和用户自己的计划任务!
注意:计划任务在调用脚本执行时的路径与linux系统的PATH路径不一样,计划任务调用脚本的路径比较少,因此为了防止命令找不到,建议在脚本里使用命令的绝对路径
[root@localhost cron]# cat /etc/crontab
...
PATH=/sbin:/bin:/usr/sbin:/usr/bin #计划任务调用脚本的路径...
[root@localhost cron]# echo $PATH #系统的PATH变量
/usr/python3.11/bin:/usr/python3.11/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin