网站建设与维护要求,网站底部备案代码,请举例说明什么是网络营销,好的网站制作网站目录
一.计划任务概念解析
二.Liunx计划任务管理工具
1. at命令
基本语法
时间格式
常用选项 2. crontab命令
crontab 文件
/etc/cron.allow
/etc/cron.deny
使用规则
crontab 参数
crontab 文件格式
特殊用法
使用技巧与思路扩展#xff1a;
步骤
示例 一.…目录
一.计划任务概念解析
二.Liunx计划任务管理工具
1. at命令
基本语法
时间格式
常用选项 2. crontab命令
crontab 文件
/etc/cron.allow
/etc/cron.deny
使用规则
crontab 参数
crontab 文件格式
特殊用法
使用技巧与思路扩展
步骤
示例 一.计划任务概念解析 计划任务在计算机领域指的是预先设定的任务按照指定的时间或条件自动执行。它们通常用于自动化重复性操作、系统维护、数据备份、系统监控、报告生成等。计划任务的核心概念包括以下几个方面
时间表
计划任务需要指定何时执行任务。时间表可以是固定的时间点也可以是基于某些条件的动态时间。最常用的方式是基于日期和时间的调度这种情况下任务可能每天、每周、每月、甚至每年运行。
自动化
计划任务的主要目的是自动化操作这样可以减少人工干预提高效率降低人为错误的风险。计划任务可以执行脚本、程序、命令等确保系统按预期运行。
任务的重复性
计划任务通常是周期性的。这意味着任务可能每天、每周、每月甚至每年运行。任务重复的频率取决于实际需求。
任务执行环境
计划任务执行时需要在特定环境中运行包括用户权限、运行路径、环境变量等。这些环境参数在计划任务中设置后会影响任务的执行效果。
二.Liunx计划任务管理工具
在Linux系统中主要有两个工具用于管理计划任务cron和at。 RHEL6系统中默认已安装了at、crontab软件包通过atd和crond这两个系统服务实现一次性、周期性计划任务的功能并分别通过at、crontab命令进行计划任务设置。
1. at命令
at命令是用来在指定的时间执行一次相应的命令或任务。也就是说这是一种单次的、一次性的命令调度。你可以使用任何可以解析为特定时间的字符串来调度任务。在这之前我们学习使用centos7系统默认没有拉at的包因此我们需要下载并启动服务。
yum install at -y #下载
systemctl start atd #启动服务
systemctl enable atd #开机自启
基本语法
at [选项] [时间]
选项用于控制at命令的行为。包括读取任务来源、发送邮件等。 时间指定任务执行的时间。可以使用各种格式如绝对时间、相对时间、日期等。
时间格式
at命令的时间参数可以接受多种格式。常见的时间指定方式包括
绝对时间
小时:分钟指定任务执行的具体时间。例如14:00表示下午2点。小时:分钟 [AM/PM]指定上午或下午。例如2pm表示下午2点。
相对时间
now 时间量以当前时间为基准增加一定的时间量。例如now 1 hour表示一小时后执行任务。now 天数 days表示从现在起若干天后。例如now 2 days表示两天后。
日期
日期/时间指定特定日期和时间。例如12:30 12/25/2024表示在2024年12月25日中午12:30执行任务。明天或后天可以使用tomorrow或yesterday。例如3pm tomorrow表示明天下午3点。星期几可以使用星期几的名称。例如next Monday表示下周一。 常用选项
-f filename从文件中读取任务。-m任务执行完成后发送邮件给任务所有者。-l 或 atq列出当前用户的计划任务。-c job_number查看特定任务的详细信息。-d job_number 或 atrm job_number删除指定任务。
以下是一些at命令的示例
在1小时后执行任务
echo echo Hello, World! | at now 1 hour在下午2点执行任务
echo echo Running at 2pm | at 2pm在明天下午3点执行任务
echo echo Task for tomorrow | at 3pm tomorrow从文件中读取任务
echo -e echo Task 1\necho Task 2 /tmp/my_tasks
at -f /tmp/my_tasks 9am以上是编写任务的一种方式
实际上我们也可以通过直接输入命令使用ctrld 结束
[rootlocalhost ~]# at now 1 hour #在一小时后执行任务
at echo Hello, World!
at EOT #这行在我们输入命令结束后使用ctrld结束编辑即可就会出现这样的标识
job 2 at Fri May 10 00:10:00 2024
[rootlocalhost ~]# 查看当前用户的计划任务
[rootlocalhost ~]# atq
1 Fri May 10 00:07:00 2024 a root
2 Fri May 10 00:10:00 2024 a root
#第一列是任务编号。在您提供的输出中任务编号为1和2。这是用来标识计划任务的唯一标识符。
#第二、第三和第四列表示任务的计划执行时间。
#第五列为任务状态。字母a表示任务已安排且正在等待执行。这是默认状态
#最后一列是任务的所有者。查看特定任务的详细信息
at -c 1 #1就是任务编号删除计划任务
atrm 1 #1就是任务编号 2. crontab命令
crontab命令则用于执行周期性的任务。你可以设定一个任务在每天、每周、每月的特定时间执行。crontab的配置文件被分为6个字段分别表示分钟0-59、小时0-23、一个月中的某日1-31、月份1-12、一周中的某日0-70和7都表示星期日、以及需要执行的命令。
crontab 文件
每个用户可以拥有自己的crontab文件用于定义定时任务。系统还有一个全局crontab文件通常位于 /etc/crontab用于定义系统级任务。CentOS/RHEL在这些系统中crontab文件存储在 /var/spool/cron/。这个目录下会有对应于各个用户的crontab文件。当然不同的liunx发行版这个路径可能会有不同。
[rootlocalhost ~]# crontab -u root -e #指定root用户编辑计划任务
crontab: installing new crontab
[rootlocalhost ~]# crontab -u lzz -e #指定普通用户编辑拉计划任务
crontab: installing new crontab
[rootlocalhost ~]# cd /var/spool/cron/
[rootlocalhost cron]# ll
总用量 8 #这里看到的就是用指定用户的名字命名的计划任务的文件拉
-rw------- 1 root root 25 5月 10 00:00 lzz
-rw------- 1 root root 23 5月 10 00:00 root
[rootlocalhost cron]# cat root
2 * * * * echo hello
使用者权限文件
/etc/cron.allow
这个文件用于明确允许哪些用户可以使用 crontab。如果该文件存在那么只有其中列出的用户才被允许使用 crontab。未列出的用户将被禁止。文件中每一行包含一个用户名。例如如果 /etc/cron.allow 包含 root
alice 这意味着只有 root 和 alice 被允许使用 crontab。
/etc/cron.deny
这个文件用于明确禁止哪些用户使用 crontab。如果 /etc/cron.allow 不存在那么系统将查看 /etc/cron.deny。所有不在此文件中的用户都可以使用 crontab。文件中每一行包含一个用户名。例如如果 /etc/cron.deny 包含 bob
charlie 这意味着 bob 和 charlie 被禁止使用 crontab而其他用户都可以使用。
使用规则
如果存在 /etc/cron.allow则只有其中列出的用户可以使用 crontab/etc/cron.deny 将被忽略。如果 /etc/cron.allow 不存在但存在 /etc/cron.deny则所有不在 /etc/cron.deny 中的用户都可以使用 crontab。如果这两个文件都不存在则所有用户都可以使用 crontab通常只受系统权限的限制。 crontab 参数
crontab 命令有几个常用选项
crontab -e编辑当前用户的crontab文件。crontab -l列出当前用户的crontab任务。crontab -r删除当前用户的crontab任务。crontab -u USERNAME操作指定用户的crontab需要管理员权限。
编辑crontab文件
要编辑当前用户的crontab文件使用以下命令
crontab -e编辑指定用户的crontab-u选项通常用于指定特定用户而后续应该带上其他操作参数或文件名。
crontab -u lzz -e查看crontab任务
要查看当前用户的crontab任务可以使用
crontab -l删除当前用户的crontab
如果您想删除当前用户的整个crontab文件可以使用以下命令
crontab -r
这个命令会删除当前用户的所有定时任务并且没有确认提示。因此使用此命令时要小心因为删除后将无法恢复。删除其他用户的crontab
如果是系统管理员并想删除其他用户的crontab可以指定用户名。请确保有适当的权限。以下命令删除指定用户的crontab
crontab -u 用户名 -r删除crontab中的特定任务
要删除crontab中的特定任务最佳方法是编辑crontab文件并移除相应的行。建议在删除任务前备份crontab文件。如果需要备份当前用户的crontab可以使用以下命令导出到文件
crontab -l crontab_backup.txt
这样即使意外删除了任务您也可以通过导入备份来恢复
crontab crontab_backup.txt crontab 文件格式
crontab文件的每一行代表一个任务格式如下
分钟 小时 日 月 星期 命令
分钟0到59小时0到23日1到31月1到12星期0到70和7都表示星期天
此外还有一些特殊的符号和用法
*匹配任何值。,指定多个值例如1,15表示第1和第15分钟。-指定范围例如1-5表示从1到5。/指定步长例如*/5表示每5分钟。 每天早上8点执行任务
0 8 * * * /path/to/your/script.sh
这将在每天早上8点执行指定的脚本。每周一上午9点执行任务
0 9 * * 1 /path/to/weekly/script.sh
这将在每周一上午9点运行。每5分钟执行一次任务
*/5 * * * * /path/to/frequent/task.sh
这将在每5分钟执行一次任务。每个月1号中午12点执行任务
0 12 1 * * /path/to/monthly/task.sh
这将在每月的1号中午12点执行。特定日期的特定时间执行任务
0 14 15 7 * /path/to/specific/task.sh
想验证自己设定的结果可以用一些在线工具查看crontab的结果这里附上三个地址
crontab执行时间计算 - 在线工具
在线crontab表达式执行时间计算工具_蛙蛙工具
Cron - 在线Cron表达式生成器 特殊用法
使用语法可以使用特殊的字符串表示常见的时间配置。 reboot在系统启动时运行。yearly或annually每年执行一次。monthly每月执行一次。weekly每周执行一次。daily或midnight每天执行一次。hourly每小时执行一次。
以下是系统启动时运行的示例
reboot /path/to/startup/task.sh
使用技巧与思路扩展
要在每月的最后一天执行特定命令最常见的方式是使用crontab中的定时任务。由于每个月的天数不固定直接用crontab无法简单地指定每月的最后一天。需要使用一种技巧来实现这一目标。
可以在crontab中设置一个每天运行的任务然后用脚本判断是否是当月的最后一天。如果是则执行特定命令。
步骤
设置定时任务在crontab中设置一个每天在固定时间执行的任务。判断是否是最后一天在任务中编写逻辑判断当天是否是当月的最后一天。执行特定命令如果是最后一天则执行特定命令。
示例
以下是一个示例说明如何在每月的最后一天执行特定命令。在这个例子中每天晚上11:59运行一个脚本然后检查是否是当月的最后一天。 编辑crontab 使用crontab -e来编辑crontab文件。 设置定时任务 在crontab中添加以下行每天晚上11:59执行一个检查脚本 59 23 * * * /path/to/check_last_day.sh
#当然这个时间点可以设置成任意的时间点去判断只要这个时间点不影响你执行时间即可 编写检查脚本 创建一个脚本/path/to/check_last_day.sh用来判断当天是否是当月的最后一天。如果是则执行特定命令。 #!/bin/bash# 获取明天的日期
tomorrow$(date -d tomorrow %d)# 如果明天的日期是1表示今天是当月的最后一天
if [ $tomorrow -eq 1 ]; then# 如果是最后一天执行特定命令/path/to/your/command.sh
fi添加执行权限 确保脚本有执行权限 chmod x /path/to/check_last_day.sh