cron计划任务
经验丰富的系统运维工程师可以使得Linux在无需人为介
入的情况下,在指定的时间段自动启用或停止某些服务或
命令,从而实现运维的自动化。
作用:计划任务主要是做一些周期性的任务,目前最主要的
用途是定期备份数据
分类:
1 一次性计划任务:今晚11点30分开启网站服务。
2 长期性计划任务:每周一的凌晨2点20分把/data/wwwroot目
录打包备份为backup.tar.gz。
一次性计划任务只执行一次,一般用于满足临时的工作需求。我
们可以用at命令实现这种功能,只需要写成“at 时间”的形式就
可以。
at的语法结构为:
at [OPTION]... TIME
TIME可以设定为以下的形式,非常灵活多变:
HH:MM [YYYY-mm-dd]
noon,midnight, teatime
tomorrow
now+#
UNIT:minutes, hours, days, OR weeks
比如:
now +5minutes 表示任务将在5分钟后执行;
now +1hours 表示任务将在1小时候执行;
now + 31days 表示任务将在1个月后执行;
now +1weeks表示任务将在1周后执行;
12:32 表示任务将在今天的12:32分的时候执行;
一次性计划任务:
[root@node2 ~]# yum install at -y
[root@node2 ~]# systemctl enable atd.service
[root@node2 ~]# systemctl start atd.service
[root@node2 ~]# systemctl status atd
● atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-06-25 11:30:40 CST; 6s ago
Main PID: 12376 (atd)
CGroup: /system.slice/atd.service
└─12376 /usr/sbin/atd -f
Jun 25 11:30:40 node2 systemd[1]: Started Job spooling tools.
一次性计划任务:
1 一次性计划任务:Ctrl + D组合键来结束编写计划任务
2 at命令接收前面echo命令的输出信息,以达到通过非交互式的方式创建计划一次性任务的目的
创建计划任务:at
[root@node2 ~]# echo 'systemctl restart httpd' | at 23:30
job 1 at Thu Jun 25 23:30:00 2020
[root@node2 ~]# echo 'systemctl restart tengine' | at 23:31
job 2 at Thu Jun 25 23:31:00 2020
查看计划任务: at -l
[root@node2 ~]# at -l
1 Thu Jun 25 23:30:00 2020 a root
[root@node2 ~]# at -l
1 Thu Jun 25 23:30:00 2020 a root
2 Thu Jun 25 23:31:00 2020 a root
删除计划任务:at -r 序号
[root@node2 ~]# at -l
1 Thu Jun 25 23:30:00 2020 a root
2 Thu Jun 25 23:31:00 2020 a root
[root@node2 ~]# at -r 2
[root@node2 ~]# at -l
1 Thu Jun 25 23:30:00 2020 a root
如果我们希望Linux系统能够周期性地、有规律地执行某
些具体的任务,那么Linux系统中默认启用的crond服务
创建、编辑计划任务的命令为“crontab -e”,查看当前
计划任务的命令为“crontab -l”,删除某条计划任务的
命令为“crontab -r”。
crontab命令中加上-u参数来编辑他人的计划任务
1.每月1,10,22日的4:45重启network服务
45 4 1,10,22 * * /usr/bin/systemctl restart network
2.每周六、日的1:10重启network服务
10 1 * * 6-7 /usr/bin/systemctl restart network
3.每天18:00到23:00之间每隔30分钟重启network
0/30 18-23 * * *
4.每隔两天的上午8点到11点的第三和第十五分钟执行一次重启
3,15 8-11 */2 * *
5.每周日凌晨2点30分,执行文件的备份
30 2 * * 7
6.晚上11点到早上7点之间,每隔一小时重启smb
0 23,0-7/1 * * * /usr/bin/systemctl restart smb
####为普通用户编辑计划任务(tom必须为真实存在的用户)
[root@auto-yunwei ~]# crontab -e -u tom
####删除计划任务
[root@auto-yunwei ~]# crontab -r -u tom
[root@node2 ~]# cat /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