Linux 定时任务

您所在的位置:网站首页 linux查看执行结果 Linux 定时任务

Linux 定时任务

2024-01-12 18:36| 来源: 网络整理| 查看: 265

在计算机的使用过程中,经常会有一些计划中的任务需要在将来的某个时间执行,Linux 中提供了一些方法来设定定时任务:

at;crontab;systemd.timer。

这篇文章我们先来介绍 at 的使用方法。

at 简介

命令 at 从文件或标准输入中读取命令并在将来的一个时间执行,只执行一次。at 的正常执行需要有守护进程 atd。

at 命令格式:at [参数] [时间]

at 命令参数:

-m 当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出-I atq的别名-d atrm的别名-v 显示任务将被执行的时间-c 打印任务的内容到标准输出-V 显示版本信息-q 使用指定的列队-f 从指定文件读入任务而不是从标准输入读入-t 以时间参数的形式提交要运行的任务 at 安装 #安装at [root@peipei3514 ~]# yum install -y at #启动守护进程 [root@peipei3514 ~]# systemctl start atd #查看是否开机启动 [root@peipei3514 ~]# systemctl list-unit-files|grep atd #设置开机启动 [root@peipei3514 ~]# systemctl enable atd at 使用

如果不使用管道|或指定选项 -f 的话,at 的执行将会是交互式的,需要在 at 的提示符下输入命令:

#创建定时任务 [root@peipei3514 /]# at now +2 minutes #执行at并指定执行时刻为现在时间的后两分钟 at> echo hello world > /tmp/file #手动输入命令并回车 at> #ctrl+d 结束输入 job 3 at Wed May 2 18:20:00 2018 #显示任务号及执行时间

选项 -l 或命令 atq 查询任务:

[root@peipei3514 /]# atq 3 Wed May 2 18:20:00 2018 a root

到达时间后任务被执行,生成一个新文件file并保存echo的输出内容:

[root@peipei3514 /]# ll tmp/ 总用量 4 -rw-r--r--. 1 root root 12 5月 2 18:20 file drwx------. 3 root root 17 5月 2 16:56 systemd-private-9b1eddd804d24223a769ba0be3fc7736-chronyd.service-hAmDBg drwx------. 2 root root 6 5月 2 16:56 tmp.6EvK3t6xmq drwx------. 2 root root 6 4月 23 18:41 tmp.HEQ599GHwD drwx------. 2 root root 6 5月 2 12:44 tmp.VqttdTFfak drwx------. 2 root root 6 4月 23 18:41 tmp.WDevelDATu [root@peipei3514 /]# cat /tmp/file hello world

选项 -d 或命令 atrm 表示删除任务:

[root@peipei3514 /]# at -d 3 #删除3号任务(上例) [root@peipei3514 /]# atq [root@peipei3514 /]#

可以使用管道 | 或选项 -f 让 at 从标准输入或文件中获得任务:

[root@peipei3514 /]# cat test.txt echo hello world > /root/temp/file [root@peipei3514 /]# at -f test.txt 5pm +2 days job 12 at Wed May 4 18:20:00 2018 [root@peipei3514 /]# cat test.txt|at 16:20 12/23/18 job 13 at Fri Dec 23 16:20:00 2018 at 时间格式

at 指定时间的方法很丰富,可以是:

hh:mm 小时:分钟(当天,如果时间已过,则在第二天执行);midnight(深夜),noon(中午),teatime(下午茶时间,下午4点),today,tomorrow等;12小时计时制,时间后加am(上午)或pm(下午);指定具体执行日期:mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年);相对计时法:now + n units,now是现在时刻,n为数字,units是单位(minutes、hours、days、weeks)。

如明天下午2点20分执行创建一个目录:

[root@peipei3514 /]# at 02:20pm tomorrow at> mkdir /root/temp/X at> job 4 at Wed May 2 18:25:00 2018 at 控制文件

atd 通过两个文件 /etc/at.allow 和 /etc/at.deny 来决定系统中哪些用户可以使用 at 设置定时任务,它首先检查 /etc/at.allow,如果文件存在,则只有文件中列出的用户(每行一个用户名),才能使用 at;如果不存在,则检查文件 /etc/at.deny,不在此文件中的所有用户都可以使用 at。如果 /etc/at.deny 是空文件,则表示系统中所有用户都可以使用 at;如果 /etc/at.deny 文件也不存在,则只有超级用户(root)才能使用at。

at 例子 实例1:三天后的下午 5 点钟执行 /bin/ls

命令:

at 5pm+3 days

输出:

[root@localhost ~]# at 5pm+3 days at> /bin/ls at> job 7 at 2013-01-08 17:00 [root@localhost ~]# 实例2:明天17点钟,输出时间到指定文件内

命令:

at 17:20 tomorrow

输出:

[root@localhost ~]# at 17:20 tomorrow at> date >/root/2013.log at> job 8 at 2013-01-06 17:20 [root@localhost ~]# 实例3:计划任务设定后,在没有执行之前我们可以用atq命令来查看系统没有执行工作任务

命令:

atq

输出:

[root@localhost ~]# atq 8 2013-01-06 17:20 a root 7 2013-01-08 17:00 a root [root@localhost ~]# 实例4:删除已经设置的任务

命令:

atrm 7

输出:

[root@localhost ~]# atq 8 2013-01-06 17:20 a root 7 2013-01-08 17:00 a root [root@localhost ~]# atrm 7 [root@localhost ~]# atq 8 2013-01-06 17:20 a root [root@localhost ~]# 实例5:显示已经设置的任务内容

命令:

at -c 8

输出:

[root@localhost ~]# at -c 8 #!/bin/sh # atrun uid=0 gid=0 # mail root 0 umask 22此处省略n个字符 date >/root/2013.log [root@localhost ~]#


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3