网站建设明细报价表仅供参考,佛山网站优化怎么做,外贸网站google推广,百度首页关键词优化本章主要介绍如何创建计划任务
使用 at 创建计划任务使用 crontab 创建计划任务 有时需要在某个指定的时间执行一个操作#xff0c;此时就要使用计划任务了。计划任务有两种#xff1a; 一个是at计划任务#xff0c;另一个是 crontab计划任务。
下面我们分别来看这两种计划…本章主要介绍如何创建计划任务
使用 at 创建计划任务使用 crontab 创建计划任务 有时需要在某个指定的时间执行一个操作此时就要使用计划任务了。计划任务有两种 一个是at计划任务另一个是 crontab计划任务。
下面我们分别来看这两种计划任务的使用方法。 at at计划任务是一次性的到了指定的时间点就开始执行指定的命令执行完成之后不会重复执行这个命令。
首先查看系统中是否存在at计划任务命令是atq或at -1(字母1)命令如下。
[rootrhel03 ~]# atq
[rootrhel03 ~]#
[rootrhel03 ~]# at -l
[rootrhel03 ~]# 这两个命令都没有任何输出说明当前系统中并不存在任何计划任务。下面开始创建at计划任务at的用法如下。 at 时间点 按 【Enter】键 输入要执行的命令 CtrlD 提交 例如,要在2025年12月12日执行hostname命令命令如下。
[rootrhel03 ~]# at 2025-12-12
warning: commands will be executed using /bin/sh
at hostname
at EOT
job 1 at Fri Dec 12 11:48:00 2025
[rootrhel03 ~]# 这里只是指定了日期并没有指定在2025年12月12日的几点执行。那么创建这个计划任务时是几点几分例如这里是在11点48分创建的at计划任务那么到了2025年12月12 日的11点48分就要自动执行hostname命令了。
如果要指定某个时间点格式如下。 at 时间 日期 按 【Enter】键 输入要执行的命令 CtrlD 提交 例如要在2025年12月12日上午10点执行 hostname命令命令如下。
[rootrhel03 ~]# at 10:00 2025-12-12
warning: commands will be executed using /bin/sh
at hostname
at EOT
job 2 at Fri Dec 12 10:00:00 2025
[rootrhel03 ~]#
注意
这里是24小时制的所以10:00指的是上午10点如果想指定下午10点则要写成22:00。写时间最多只能精确到分,不能精确到秒。 这里上午用am表示下午用pm表示。例如要在2025年12月12日下午10点执行 hostname命令,命令如下。
[rootrhel03 ~]# at 10pm 2025-12-12
warning: commands will be executed using /bin/sh
at hostname
at EOT
job 3 at Fri Dec 12 22:00:00 2025
[rootrhel03 ~]# at也支持某天之后的某个时间点运行一个命令。例如要在3天之后的下午4点执行 hostname命令命令如下。
[rootrhel03 ~]# at 4pm 3days
warning: commands will be executed using /bin/sh
at hostname
at EOT
job 4 at Mon Dec 11 16:00:00 2023
[rootrhel03 ~]#
这里“”两边有没有空格都可以days可以换成weeks表示3周之后的下午4点。
如果想在第二天的下午4点执行hostname命令命令如下。
[rootrhel03 ~]# at 4pm 1days
warning: commands will be executed using /bin/sh
at hostname
at EOT
job 5 at Sat Dec 9 16:00:00 2023
[rootrhel03 ~]#
或者用关键字tomorrow如果使用关键字tomorrow则不需要加“”命令如下。
[rootrhel03 ~]# at 4pm tomorrow
warning: commands will be executed using /bin/sh
at hostname
at EOT
job 6 at Sat Dec 9 16:00:00 2023
[rootrhel03 ~]#
上面的两条命令都是表示第二天的下午4点执行hostname命令。 这样的关键字还包括today表示“今天”。例如要在今天下午10点执行hostname命令,命令如下。
[rootrhel03 ~]# at 10pm today
warning: commands will be executed using /bin/sh
at hostname
at EOT
job 7 at Fri Dec 8 22:00:00 2023
[rootrhel03 ~]#
如果是今天执行一个命令关键字today是可以不写的不写日期默认就是“今天”。
[rootrhel03 ~]# at 10pm
warning: commands will be executed using /bin/sh
at hostname
at EOT
job 8 at Fri Dec 8 22:00:00 2023
[rootrhel03 ~]# 如果要表示几分钟或几小时之后可以用关键字now。例如要在2小时之后执行 hostname命令命令如下。
[rootrhel03 ~]# at now2hours
warning: commands will be executed using /bin/sh
at hostname
at EOT
job 9 at Fri Dec 8 13:59:00 2023
[rootrhel03 ~]#
如果想1分钟之后删除/opt下面所有的内容,命令如下。
[rootrhel03 ~]# at now1minutes
warning: commands will be executed using /bin/sh
at rm -rf /opt/*
at EOT
job 10 at Fri Dec 8 12:01:00 2023
[rootrhel03 ~]#
现在是点12点01分等一会到12点02分时再次查看/opt中的内容
[rootrhel03 ~]# date ; ls /opt/
2023年 12月 08日 星期五 12:02:45 CST
[rootrhel03 ~]#
可以看到/opt中的内容已经被清空。 到现在为止已经做了很多个at计划任务了现在来查看一下有多少个了。通过atq或at -1 都可以查看。
[rootrhel03 ~]# atq
1 Fri Dec 12 11:48:00 2025 a root
2 Fri Dec 12 10:00:00 2025 a root
3 Fri Dec 12 22:00:00 2025 a root
4 Mon Dec 11 16:00:00 2023 a root
5 Sat Dec 9 16:00:00 2023 a root
6 Sat Dec 9 16:00:00 2023 a root
7 Fri Dec 8 22:00:00 2023 a root
8 Fri Dec 8 22:00:00 2023 a root
9 Fri Dec 8 13:59:00 2023 a root
[rootrhel03 ~]#
可以看到每个at计划任务前都有一个编号。如果要删除某个at计划任务可以用如下命令。 atrm N 或at ‐d N 这里N指的是atq查看结果中前面的编号。
假设现在要删除编号为9的at计划任务命令如下。
[rootrhel03 ~]# atrm 9
[rootrhel03 ~]#
如果删除编号为5到8的这些at计划任务命令如下。
[rootrhel03 ~]# atrm {5..8}
[rootrhel03 ~]#
查看现在还有的at计划任务命令如下。
[rootrhel03 ~]# atq
1 Fri Dec 12 11:48:00 2025 a root
2 Fri Dec 12 10:00:00 2025 a root
3 Fri Dec 12 22:00:00 2025 a root
4 Mon Dec 11 16:00:00 2023 a root
[rootrhel03 ~]#
可以看到5到9都已经删除了,现在只剩下1到4了。
查看at计划任务的具体内容命令如下。 at ‐c N 这里N指的是 atq查看结果中前面的编号。例如要查看第一个at计划任务的内容可以通过如下命令。
[rootrhel03 ~]# at -c 1 | tail -3
${SHELL:-/bin/sh} marcinDELIMITER05cc464a
hostname
marcinDELIMITER05cc464a
[rootrhel03 ~]# 这里at -c 1的结果太多所以通过管道传递给tail 命令获取最后3行的内容。可以看到, 第一个at计划任务中执行的命令是hostname。 任何用户都是可以创建at计划任务的下面使用tom用户创建一个at计划任务。在第二个终端中使用tom登录然后用atq查看是否有at计划任务。
[tomrhel03 ~]$ atq
[tomrhel03 ~]$ 可以看到tom用户并没有at计划任务。下面使用tom用户随便创建一个at计划任务例如要在3小时之后执行hostname命令。
[tomrhel03 ~]$ at now3hours
warning: commands will be executed using /bin/sh
at hostname
at EOT
job 12 at Fri Dec 8 15:13:00 2023
[tomrhel03 ~]$ 这里是可以正常创建的如果要禁止哪个用户创建at计划任务只要把这个用户名写 入/etc/at.deny中即可一行一个用户。下面练习禁止 tom用户创建at计划任务使用root 做如下操作。
[rootrhel03 ~]# echo tom /etc/at.deny
[rootrhel03 ~]# cat /etc/at.deny
tom
[rootrhel03 ~]# 凡是出现在/etc/at.deny文件中的用户都是不允许创建at计划任务的。切换到tom用户创 建at计划任务。
[tomrhel03 ~]$ at now1hours
You do not have permission to use at.
[tomrhel03 ~]$
可以看到tom用户已经没有权限创建了。
如果想继续允许tom用户创建at计划任务有以下两种方法。
1把tom用户从/etc/at.deny中删除。
2把 tom用户添加到/etc/at.allow中。 /etc/at.allow这个文件默认不存在需要创建出来且at.allow 的优先级要高于 at.deny所以tom 如果同时出现在这两个文件中那么at.allow生效。
下面设置tom用户可以创建at计划任务使用root做如下操作。
[rootrhel03 ~]# echo tom /etc/at.allow
[rootrhel03 ~]# cat /etc/at.allow
tom
[rootrhel03 ~]# cat /etc/at.deny
tom
[rootrhel03 ~]# 现在tom用户在at.allow 和 at.deny中都存在at.allow生效所以 tom用户是可以创建 at计划任务的。切换到tom用户创建at计划任务。
[tomrhel03 ~]$ at now1hours
warning: commands will be executed using /bin/sh
at hostname
at EOT
job 13 at Fri Dec 8 13:18:00 2023
[tomrhel03 ~]$ 这里可以看到at提示符,说明tom用户可以创建at计划任务了,按【CtrlC】组合键终止。 crontab at计划任务是一次性的执行完成就结束不会重复执行。如果想定期执行某个任务例如,每周日凌晨2点执行一个命令这时就要用到crontab了。 查看当前用户是否有 crontab计划任务可以用crontab-1命令。如果要查看其他用户是否有crontab计划任务可以用“crontab -1-u用户名”命令不过-u选项只有root才能 用。
使用root用户查看自己有没有crontab计划任务命令如下。
[rootrhel03 ~]# crontab -l
no crontab for root
[rootrhel03 ~]#
使用root用户查看tom用户是否有crontab计划任务命令如下。
[rootrhel03 ~]# crontab -l -u tom
no crontab for tom
[rootrhel03 ~]# 创建crontab计划任务的命令是crontab -e如果为其他用户创建crontab计划任务则用“crontab -e -u用户名”命令。当使用crontab-e命令时会打开一个临时文件用与 vim 一样的语法来编辑此文件即可。先按【i】键进入插入模式编辑完成之后按【Esc】 键退回到命令模式在末行模式中输入“wq”保存退出。在此文件中凡是以“#”开头的,都 是注释行。
crontab定义计划任务的语法如下。 分 时 天 月 周 命令 注意因为在crontab中使用的并非系统的PATH变量所以此处语法中要执行的命令最好能加上路径, 例如要执行ifconfig命令则写作/sbin/ifconfig要执行hostname命令则写作 bin/hostname。命令的路径可以通过which命令来查询。
几个时间单位的意义如下。 分几点几分的分。时几点24小时制。天几号。月几月份。周星期几。 这几个时间单位可以用空格也可以用【Tab】键来分隔。 如果不考虑某个时间单位例如不管今天是几号只要不是周末我们就上班不考虑“天”的情况下,那么可以用*表示。 这里每个时间点都可以写多个值,用英文逗号“,”隔开,例如在分的位置写“0,1.,5,10, 表示0分、1分、5分、10分。
也可以用横杠“-”表示“到”的意思例如在分的位置写“0-10”表示0到10分。 这里“0-10”的完整写法是“0-10/1”表示从0分到10分的每一分钟从0开始每次增加1,然后到10。如果表示“每N分钟”则写成“0-10/N”例如0到10中每2分钟则 写成“0-10/2”表示0分、2分、4分、6分、8分、10分。
练习1每天上午7点整执行hostname命令如果写成如下命令。
# 分 时 天 月 周* 7 * * * /usr/bin/hostname 这种写法是不对的第一个位置是分这里写成了*表示7点的每一分包括0分、1 分……但是所谓7点整的意思是7点0分所以要写成如下命令。
# 分 时 天 月 周0 7 * * * /usr/bin/hostname
练习2每周一到周五的上午7点整执行hostname命令命令如下。
# 分 时 天 月 周0 7 * * 1,2,3,4,5 /usr/bin/hostname
这里可以写成如下命令。
# 分 时 天 月 周0 7 * * 1-5 /usr/bin/hostname
这里1-5表示周一到周五如果是周六的上午7点整就不会执行hostname命令。
练习3第一季度中每周一到周五的上午7点整执行hostname命令命令如下。
# 分 时 天 月 周0 7 * 1-3 1-5 /usr/bin/hostname 一年的第一季度是1到3月份这里分、时、月、周没有天)是“和”的关系这4个时间单位必须都满足才能执行hostname命令。
所以5月份的周三上午7点整是不会执行hostname命令的因为“月”没有满足条件。
练习4第一季度中每月上旬的上午7点整执行hostname命令命令如下。
# 分 时 天 月 周0 7 1-10 1-3 * /usr/bin/hostname 一年的第一季度是1到3月份每月上旬是1到10日这里分、时、天、月没有周) 是“和”的关系这4个时间单位必须都满足才能执行hostname命令。 所以5月8日上午7点整是不会执行hostname命令的因为“月”没有满足条件。大家 要记住,“天”和“周”是“或”的关系即
1分、时、月、周同时满足了即使“天”不满足条件也会执行指定的命令。
2分、时、天、月同时满足了即使“周”不满足条件也会执行指定的命令。
练习5在5个时间点都写的情况命令如下。
# 分 时 天 月 周0 7 1-10 1-3 1-5 /usr/bin/hostname这里天和周的位置都写了本句的意思并不是说每年1到3月份的上旬且要满足周一到周五的上午7点整才执行hostname命令。 这句的意思是每年的1到3月份这3个月每月1到10日或周一到周五二者满足其一),上午 7点整都会执行hostname命令。这条其实综合了上面练习3和练习4中的意思。
现在最终的crontab计划任务内容如下。
[rootrhel03 ~]# crontab -l
# 分 时 天 月 周0 7 * * * /usr/bin/hostname0 7 * * 1,2,3,4,5 /usr/bin/hostname0 7 * * 1-5 /usr/bin/hostname0 7 * 1-3 1-5 /usr/bin/hostname0 7 1-10 1-3 * /usr/bin/hostname0 7 1-10 1-3 1-5 /usr/bin/hostname
[rootrhel03 ~]# 如果要编辑 crontab计划任务通过crontab -e来重新编辑;如果要删除执行 crontab - r命令即可命令如下。
[rootrhel03 ~]# crontab -r
[rootrhel03 ~]# crontab -l
no crontab for root
[rootrhel03 ~]# 普通用户也是可以创建crontab计划任务的如果不想让这个用户创建crontab计划任务, 则把这个用户写入/etc/cron.deny中即可一行一个用户。这个文件默认为空命令如下。
[rootrhel03 ~]# cat /etc/cron.deny
[rootrhel03 ~]#
如果不希望tom用户创建crontab计划任务则把tom用户写入这个文件中命令如下。
[rootrhel03 ~]# echo tom /etc/cron.deny
[rootrhel03 ~]# cat /etc/cron.deny
tom
[rootrhel03 ~]#
在第二个标签中用tom登录然后测试创建一个crontab计划任务命令如下。
[tomrhel03 ~]$ crontab -e
You (tom) are not allowed to use this program (crontab)
See crontab(1) for more information
[tomrhel03 ~]$
可以看到tom用户现在无法创建crontab计划任务了。
如果又想让 tom用户可以创建crontab计划任务有以下两种方法。
把tom用户从/etc/cron.deny 中删除这种方法大家自行练习。 创建/etc/cron.allow这个文件默认不存在把tom用户名写到此文件中命令如下。
[rootrhel03 ~]# ls /etc/cron.allow
ls: 无法访问/etc/cron.allow: 没有那个文件或目录
[rootrhel03 ~]# echo tom /etc/cron.allow
[rootrhel03 ~]#
现在tom既出现在/etc/cron.allow中又出现在/etc/cron.deny中命令如下。
[rootrhel03 ~]# cat /etc/cron.allow
tom
[rootrhel03 ~]# cat /etc/cron.deny
tom
[rootrhel03 ~]#
此时cron.allow生效。
在第二个标签中用tom登录crontab计划任务是能够创建的。
系统中也自带一些crontab计划任务在/etc 中存在几个以cron开头的目录命令如下。
[rootrhel03 ~]# ls /etc/cron*
/etc/cron.allow /etc/cron.deny /etc/crontab/etc/cron.d:
0hourly raid-check/etc/cron.daily:
logrotate/etc/cron.hourly:
0anacron/etc/cron.monthly:/etc/cron.weekly:
[rootrhel03 ~]# 每天都会执行一次/etc/crondaily中的脚本每小时都会执行一次/etc/cron.hourly中的 脚本每月都会执行一次/etc/cron.monthly中的脚本每周都会执行一 次/etc/cron.weekly中的脚本。