Linux系统提供了强大的计划任务功能,通过`at`和`cron`两大工具,实现了从一次性任务到周期性任务的全面覆盖
本文将详细介绍如何在Linux系统中编写和执行计划任务,确保各项任务能够按时、高效地运行
一、计划任务概述 计划任务,简而言之,就是预先设定好任务执行的时间和条件,使系统能够在未来某个时刻自动执行这些任务
在Linux系统中,任务计划主要通过`at`和`cron`两个工具来实现
`at`适用于一次性任务调度,而`cron`则适用于循环调度执行
执行计划任务之前,确保服务器时间准确无误至关重要
时间错误可能导致计划任务失败或无法达到预期效果,特别是在大规模集群环境中
因此,首先需要同步服务器时间
同步服务器时间 - CentOS 6:使用ntpdata命令与服务器同步时间,修改`/etc/ntp.conf`文件,添加服务器地址,并启用`ntpd`服务
- CentOS 7:使用chronyd服务进行时间同步,修改`/etc/chrony.conf`文件,添加服务器地址,并启用`chronyd`服务
时间同步完成后,即可开始配置计划任务
二、一次性任务调度:`at`命令 `at`命令用于在特定时间执行一次性任务
它依赖于`atd`守护进程,系统通过该进程扫描任务队列并等待任务执行
`at`命令的使用 1.确认atd服务状态: -CentOS 6:使用`chkconfig –list atd`检查服务状态,若未开启,则使用`service atdstart`启动
-CentOS 7:使用`systemctl status atd`检查服务状态,若未开启,则使用`systemctl start atd`启动
2.at命令语法: bash at【选项】 【时间】 -`-c`:列出指定任务的详细内容
-`-l`:列出当前用户的所有`at`调度任务
3.时间格式: -日期:MM/DD/YY、MMDDYY、DD.MM.YY -时间:HH:MM、HH:MMam、HH:MMpm -特殊日期:Midnight(0am)、noon(12pm)、Teatime(4pm)、now(现在)、now + N(minutes, hours, days, weeks) 4.示例: - 在晚上11点重启系统:`at 23:00`,然后输入`reboot`并按`Ctrl+D`结束输入
- 在5分钟后打印“Hello, World!”:`at now + 5minutes`,然后输入`echo Hello,World!`并按`Ctrl+D`
`at`任务管理 查看任务队列:使用atq命令
删除任务:使用atrm 【队列ID】命令
`at`的权限控制 - 黑名单与白名单:系统默认存在/etc/at.deny黑名单文件,可手动创建`/etc/at.allow`白名单文件
- 若只有`/etc/at.deny`,则不在该文件中的用户可以使用`at`
- 若同时存在`/etc/at.allow`和`/etc/at.deny`,则只有`/etc/at.allow`中的用户可以使用`at`
- 若两者都不存在,则只有超级用户可以使用`at`
三、循环任务调度:`cron`命令 `cron`用于实现周期性计划任务的执行,是Linux系统中不可或缺的任务调度工具
它依赖于`crond`守护进程,定期检查系统中的任务并执行
`cron`命令的使用 1.确认crond服务状态: -CentOS 6:使用`service crondstatus`检查服务状态,若未开启,则使用`service crondstart`启动
-CentOS 7:使用`systemctl status crond`检查服务状态,若未开启,则使用`systemctl start crond`启动
2.crontab命令语法: bash crontab【选项】 -`-l`:查看当前用户的`cron`计划任务列表
-`-e`:以默认文本编辑器编辑`cron`计划任务列表
-`-r`:删除当前用户的所有`cron`计划任务
-`-u`:指定用户
3.cron时间格式: `cron`时间格式由五列组成,分别代表分钟(0-59)、小时(0-23)、日期(1-31)、月份(1-12)、星期(0-6,0和7均表示周日)
每列之间用空格分隔,格式如下: command -:表示任意时间
-,:表示多个并列的时间点
--:表示一个时间范围
-/:表示时间间隔
4.示例: - 每5分钟执行一次脚本`/mysql_back.sh、`:`/5 /mysql_back.sh` - 每月14、6号的2点整执行脚本`/mysql_back.sh`:`0 2 1,4,6/mysql_back.sh` - 每周五的2点整执行脚本`/mysql_back.sh`:`0 25 /mysql_back.sh` `cron`任务管理 - 创建任务:使用crontab -e命令编辑`cron`任务列表,添加任务后保存退出
- 查看任务:使用crontab -l命令查看当前用户的`cron`任务列表
- 删除任务:使用crontab -r命令删除当前用户的所有`cron`任务,或使用`-e`选项编辑后删除特定任务
`cron`的权限控制 - 黑名单与白名单:系统默认存在`/etc/cron.deny`黑名单文件,可手动创建`/etc/cron.allow`白名单文件
- 权限控制规则与`at`命令相同
四、计划任务的高级管理 - 计划任务输出:默认情况下,计划任务的输出会通过邮件发送给用户
为避免大量垃圾邮件,建议将输出重定向到`/dev/null`或指定日志文件
- 日志文件:/var/log/cron记录了`cron`任务执行的相关信息,可用于排查问题或恢复误操作
系统级计划任务: -`/etc/crontab`:系统级别的周期性任务计划文件,仅root用户可编辑
-`/etc/cron.d/`:存储系统创建的周期计划任务的目录
-`/etc/cron.hourly/`、`/etc/cron.daily/`、`/etc/cron.weekly/`、`/etc/cron.monthly/`:分别存储每小时、每天、每周、每月要运行的计划任务
五、总结 通过`at`和`cron`两大工具,Linux系统提供了强大而灵活的任务调度功能
无论是需要一次性执行的任务,还是需要周期性重复执行的任务,都能通过简单的配置实现自动化管理
正确配置和使用这些工具,不仅能提高系统管理员的工作效率,还能确保各项任务按时、准确地执行,从而保障系统的稳定性和安全性
在实际应用中,建议结合具体需求,合理规划任务执行时间和频率,避免资源冲突和任务失败
同时,定期检查和维护计划任务,确保任务列表的准确性和有效性,是保障系统稳定运行的重要措施