一般在linux中设置定时任务有两种方式:
一般这两个任务都是已经启动的,但如果没有开启请先开启服务。
[root@localhost ~]# systemctl start atd
at的访问控制是依据/etc/at.allow(白名单)和/etc/at.deny(黑名单)两个文件来控制的。
命令格式:
[root@localhost ~]# at [选项] 时间
选项:
at支持的时间格式如下:
注:
例:
[root@localhost ~]# at now + 3minutes
warning: commands will be executed using /bin/sh
at> echo "hello world! "
at>
可以使用"at -c 任务号"或"atq"查询at任务。
[root@localhost ~]# atq
5 Fri Mar 11 00:54:00 2022 a root
可以用atrm命令删除"at任务"
[root@localhost ~]# atrm [工作号]
crond默认是开启的,如果没有开启,手动开启,把自启动服务设置好。
[root@localhost ~]# ps aux | grep crond
root 910 0.0 0.4 37164 3532 ? Ss 01:02 0:00 /usr/sbin/crond -n
root 1541 0.0 0.1 12348 992 pts/0 S+ 01:05 0:00 grep --color=auto crond
crond命令和at命令类似,也是通过/etc/cron.allow(白名单)和/etc/cron.deny(黑名单)来限制某些用户使用crond命令的权限。同样,/etc/cron.deny默认存在,有需要的话/etc/cron.allow可以手动创建。
crontab有两种方法设置定时任务,第一种是用命令行设置,每个用户都可以实现自己的crontab定时任务,只要使用这个用户身份执行"crontab -e"命令;第二种方法则是直接写入配置文件中。
命令格式:
[root@localhost ~]# crontab [选项]
选项:
通过crontab -e打开编辑模式,以下面的格式添加要执行的命令:
* * * * * 执行的任务
"*"的含义:
* | 含义 | 范围 |
---|---|---|
第一个* | 一小时中的第几分钟 | 0-59 |
第二个* | 一天中的第几个小时 | 0-23 |
第三个* | 一个月中的第几天 | 1-31- |
第四个* | 一年中的第几个月 | 1-12 |
第五个* | 一周中的星期几 | 0-7(0,7都表示周日) |
特殊符号:
符号 | 含义 |
---|---|
* | 代表所有时间。 |
, | 代表不连续的时间,比如"10,50 * * * * 命令"表示在每小时的第10分钟第50分钟执行命令。 |
- | 代表连续的时间范围,比如"10 0-6 * * * 命令"表示在每天的0点到6点之间的每个小时的第10分钟执行任务。 |
*/n | 代表每隔多久执行一次任务,比如"*/20 * * * * 命令"代表每隔20分钟执行一次任务。 |
注意事项:
例:
[root@localhost ~]# crontab -e
*/5 * * * * date >>/root/date.log
#每5分钟记录一次时间追加到/root/date.log文件中
命令行crontab设置的任务是以用户身份执行的,有些定时任务需要系统执行,这是就需要编辑/etc/crontab这个配置文件了,修改/etc/crontab配置文件是,定时任务的执行身份是可以手工指定的,这样更加灵活方便。
[root@localhost ~]# vim /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 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
上面的配置文件中已经提供了示例,可以依照这个格式添加crontab定时循环任务,前五个*号和前面是一样的,username是指定定时任务的执行身份,后面跟要执行的命令。
在/etc下有着crontab的几个指定目录,这几个指定目录下的可执行文件会定期循环执行,如果有想要定时执行的脚本,也可以放入这几个目录中。
这几个目录其实是靠anacron服务运行的,后面会讲到这个服务。
Linux服务器也不会一直不断的运行下去,总会有需要关机的时候,那么这个时间段内的定时任务就无法执行了,这个时候就需要anacron服务了,anacron服务可以检测设置好的的定时有没有执行,如果超过了任务时间没有执行时,anacron就会将定时任务执行。
在/var/spool/anacron/目录下有几个文件,里面记录着/etc/目录下cron.daily、cron.monthly、cron.weekly下的上一次执行时间,如果超过规定时间,那就会找个时间执行。
[root@localhost ~]# ls /var/spool/anacron/
cron.daily cron.monthly cron.weekly
现在可以通过命令来设置anacron服务的设置。
命令格式:
[root@localhost ~]# anacron [选项] [工作名]
选项:
一般工作中不适用anacron命令设置,而是直接修改anacron的配置文件/etc/anacrontab。
[root@localhost ~]# vim /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
#这个值是设置的随机延迟,开机以后,如果有多个未完成的任务,不会一个接一个的执行,中间会设置随机
#延迟,因为有的任务工作量较大,比较占用系统资源,所以不能多个任务一起执行
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#这个是执行任务的时间范围,从凌晨3点到晚上22点
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
#任务间隔期是1天,指超过1天没有执行的话就执行;强制延迟是5分钟,执行的是/etc/cron.daily中的执行文件
#nice是设置优先级
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
上面英文是原本的注释,中文是标注的解释。
ps:尚硅谷linux视频课程学习笔记