一.基本概念
在Linux操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划好的系统管理任务(如定期备份、定期采集监测数据)。试想一下,如果系统要求在业务不那么繁忙的半夜进行调整,难道我们需要半夜爬起来去搞定吗?这个时候,能够提前制定计划,让系统自动解决问题的计划任务就派上用场了。RHEL6系统中默认已安装了at、crontab软件包,通过atd和crond这两个系统服务实现一次性、周期性计划任务的功能,并分别通过at、crontab命令进行计划任务设置。
二.一次性计划任务(at)
at是单次的计划任务,顾名思义,由at规划的任务只执行一次就会结束。
命令格式:
at [选项] [时间格式] [任务命令]
[选项]可加可不加,具体根据如下需求确定
at的参数选项:
-b 设置批处理命令的别名
-c 显示指定任务的内容
-d 删除系统中的等待任务
-f 将指定文件提交等待任务
-l 显示系统中的全部任务
-m 任务完成后给用户发邮件
-M 从不向用户发邮件
-q 使用指定的队列
-r 删除指定的任务作业
-t 以时间的形式提交运行任务
-v 显示任务将被执行的时间
-V 显示版本信息
时间格式可以精确到分钟,具体用法如下:
<时>:<分>
<年>-<月>-<日>
混合使用:
<时>:<分> <年>-<月>-<日>
当前时间:now
例如:某年某月某日 某时某分,需要删除某个文件
at 12:25 2023-02-10
at >rm -rf /filename
at ><EOT>
(<EOF>是写完命令退出at,可以用快捷键ctrl+D代替)
还可以使用相对时间进行设置:
<绝对时间> +<偏移量> <偏移单位>
#偏移单位有:minutes, hours, days, weeks
举例:两分钟后备份某个文件
at now + 2 minutes
at > cp /filename /dirname/filename.back
at ><EOT>
常用参数:
查看计划任务:at -l
删除计划任务:at -d
二.周期性计划任务(crontab)
crontab功能是管理定时计划任务。定时计划任务,顾名思义就是计划好的任务,到了时间就会自动执行。用户只要能够按照正确的格式(分、时、日、月、星期、命令)写入配置文件,那么就会按照预定的周期时间自动执行,而crontab命令则是用于配置定时计划任务的工具名称。
命令参数:
-e 编辑任务
-r 删除任务
-i 删除前询问用户是否确认
-u 设置用户名
-l 显示任务
--help 显示帮助信息
部分用户可能找不到命令,需要进行安装:
安装:yum -y install crontabs
开启服务:systemctl start crond.service
查看状态:systemctl status crond.service
开机自启:chkconfig crond on
语法格式:
语法格式 :
Minutes Hours Day-of-Month Month Day-of-Week Command
分钟 小时 日 月 周 执行的命令
0-59 0-23 1-31 1-12 0-7
时间:可以用*表示
*:每,在哪个位置表示哪个时间,例如在Month就表示每个月,在Hours就表示每小时
*/5 :表示间隔时间,例如在month上的*/2表示每间隔两个月,在hours上的*/5表示每间隔五个小时
,:不同的时间段
- : 表示范围
详细举例如图:
00 00 * * * /home/soso.sh #每天凌晨
00 02 * * * ls #每天2:00整
00 02 1 * * ls #每月1号2:00整
00 02 14 2 * ls #每年2月14号2:00整
00 02 * * 7 ls #每周日2:00整
00 02 * 6 5 ls #每年6月的周五2:00整
00 02 * * * ls #每天2:00整
*/5 * * * * ls #每隔5分钟
00 02 1,5,8 * * ls #每月1,5,8号的2:00整
00 02 1-8 * * ls #每月1到8号的2:00整
其他用户创建任务:
[root@linux-server ~]# crontab -u jack -e #使用jack用户创建
[root@linux-server ~]# crontab -u jack -l #查看jack用户的计划任务
[root@linux-server ~]# crontab -r #删除当前用户的计划任务
[root@linux-server ~]# crontab -u jack -r #删除jack用户的计划任务
关于计划任务的配置文件与权限问题:
使用者权限文件:
文件:
/etc/cron.deny
说明:
该文件中所列用户不允许使用crontab命令
文件:
/etc/cron.allow
# 当这个文件产生时,/etc/cron.deny文件失去作用,只有这个文件中的用户才能使用crontab
说明:
该文件中所列用户允许使用crontab命令
系统本身的计划任务
/etc/crontab