当需要在某一个指定的时间执行一个操作,这个时候就需要用到计划任务。计划任务分为at计划任务和crontab计划任务。
1.使用at创建计划任务
at计划任务是一次性的,到了指定时间点就开始执行指定的命令,执行完成后不会重复执行这个命令。
首先查看系统中是否存在at计划任务,命令是atq或at -1,命令如下。
1 [root@server ~]# atq
2 [root@server ~]#
3 [root@server ~]# at -1
4 [root@server ~]#
这两个命令都没有任何输出,说明当前系统中并不存在任何计划任务。下面开始创建at计划任务,at的用法如下。
1 at 时间点 <按【Enter】键>
2 > 输入要执行的命令
3 Ctrl+D 提交
例如,要在2024年11月11日执行hostname命令,命令如下。
1 [root@server ~]# at 2024-11-11
2 warning: commands will be executed using /bin/sh
3 at> hostname
4 at> <EOT>
5 job 1 at Mon Nov 11 12:18:00 2024
6 [root@server ~]#
这里只是指定了日期,并没有指定在2024年11月11日几点执行。那么,创建这个计划任务时是几点几分,例如,这里是在19点11分创建的at计划任务,那么到了2024年11月11日的19点11分就要自动执行hostname命令了。
如果要指定某个时间点,格式如下。
1 at 时间 日期 <按【Enter】键>
2 > 输入要执行的命令
3 Ctrl+D 提交
例如,要在2024年11月11日上午十点执行hostname命令,命令如下。
1 [root@server ~]# at 10:00 2024-11-11
2 warning: commands will be executed using /bin/sh
3 at> hostname
4 at> <EOT>
5 job 2 at Mon Nov 11 10:00:00 2024
6 [root@server ~]#
注意 |
(1)这里是24小时制,所以10:00指的是上午的10点,如果想指定晚上10点,则要写成22:00。 |
(2)写时间最多只能精确到分,不能精确到秒。 |
这里上午用am表示,下午用pm表示。例如,要在2024年11月11日下午10点执行hostname命令,命令如下。
1 [root@server ~]# at 10pm 2024-11-11
2 warning: commands will be executed using /bin/sh
3 at> hostname
4 at> <EOT>
5 job 3 at Mon Nov 11 22:00:00 2025
6 [root@server ~]#
at也支持某天之后的某个时间点运行一个命令。例如,要在3天之后的下午4点执行,hostname命令,命令如下。
1 [root@server ~]# at 4pm + 3days
2 warning: commands will be executed using /bin/sh
3 at> hostname
4 at> <EOT>
5 job 4 at Sun Dec 10 16:00:00 2023
6 [root@server ~]#
这里"+"两边有没有空格都可以,days可以换成weeks,表示3周之后的下午4点。
如果想在第二天的下午4点执行hostname命令,命令如下。
1 [root@server ~]# at 4pm + 1days
2 warning:commands will be executed using /bin/sh
3 at> hostname
4 at> <EOT>
5 job 5 at Thur Dec 28 16:00:00 2023
6 [root@server ~]#
或者用关键字tomorrow,如果使用关键字tomorrow,则不需要加"+",命令如下。
1 [root@server ~]# at 4pm tomorrow
2 [warning commands will be executed using /bin/sh
3 at> hostname
4 at> <EOT>
5 job 6 at Fri Nov 8 16:00:00 2023
6 [root@server ~]
上面的两条命令都是表示第二天的下午4点执行hostname命令。
这样的关键字还包括today,表示"今天"。例如,要在今天下午10点执行hostname命令,命
令如下。
1 [root@server ~]# at 10pm today
2 warning: commands will be executed using /bin/sh
3 at> hostname
4 at> <EOT>
5 job 7 at Fri Nov 7 22:00:00 2023
6 [root@server ~]#
如果是今天执行一个命令,关键字today是可以不写的,不写日期默认就是"今天"。
1 [root@server ~]# at 10pm
2 warning: commands will be