2

Linux 的 at 命令定时执行任务

 1 year ago
source link: https://xujinzh.github.io/2023/01/01/linux-at-command/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在 Linux 中循环执行命令或任务常用 crontab 开进行,定时执行一次命令或任务常用 at 命令进行。

Debian or Ubuntu

sudo apt update
sudo apt install at

CentOS or redhat

sudo yum install at

at 的守护进程是 atd,使用 at 命令时一定要保证守护进程开启。

# 开启守护进程
sudo systemctl start atd.service
# 开机自启守护进程
sudo systemctl enable atd.service
# 查看守护进程是否运行
sudo systemctl status atd.service

at 定时任务

at 定时任务的设置一般格式如下:

at [option] runtime

添加定时命令方法一

在上午10:00执行任务:

at 10:00
warning: commands will be executed using /bin/sh
# 添加需要定时执行的命令
at> date > hello.txt
# 使用快捷键: Ctrl + D 退出
at> <EOT>
job 1 at Mon Jan 2 10:00:00 2023

添加定时命令方法二

直接使用 echo 命令添加定时任务

# 10:00 执行重启电脑任务
echo "shutdown -r now" | at 10:00

添加定时任务方法三

有时候我们需要执行的任务是一个脚本文件,可以使用如下命令执行

at 10:00 -f /home/jinzhongxu/hello.sh

默认情况下,at 命令执行完后如果有输出结果会向用户发送邮件,可以使用如下方法抑制邮件发送:

at 10:00 -M

如果没有输出结果也想向用户发送邮件:

at 10:00 -m

at 命令除了运行的命令和任务外,最重要的是时间,我们可以使用如下方法指定时间

时间格式有:HH:MMHHMM,如果是12小时制,可以使用 pmam 表示下午或上午。也可以使用时间单词,如:now, midnight, noon, teatime(表示16:00)。如果指定的时间超过当前时间,则会推迟1天执行。

也可以指导执行的天,如 today, tomorrowMMDD[CC]YY, MM/DD/[CC]YY, DD.MM.[CC]YY[CC]YY-MM-DD.

Increment

增量时间,如: now + count time-unit,这里 count 表示数字,time-unit 表示数字时间单位,如 minutes, hours, days, or weeks.

# 在周日,比当前时间多10分钟执行命令
at sunday +10 minutes
# 2天后的下午1点
at 1pm + 2 days
# 1小时后执行
at now +1 hours
# 在23年1月1日12:30执行
at 12:30 010123

可以使用 -t 指定具体时刻,格式: [[CC]YY]MMDDhhmm[.ss]

# 在23年1月1日12:30:32执行
at -t 202301011230.32

默认情况下,所有的 at 命令或任务在 a 队列,可以使用 -q 指定不同的队列,队列名编号可为 a-zA-Z

# 星期一比现在多2小时执行任务,添加到队列 L 中
at monday +2 hours -q L

查看任务队列

atq
# 或者
at -l

1 Mon Jan 2 10:00:00 2023 a jinzhongxu

前面的序号为任务序号,依次累计

取消队列任务

取消序号为 1 的任务

atrm 1
# 或者
at -r 1

配置文件 /etc/at.deny/etc/at.allow 分别表示限制用户使用 at 命令和允许某些用户使用 at 命令。
默认情况下,只存在配置文件 /etc/at.deny 且为空,表示所有用户可以使用 at 命令,如果不想某个用户使用,可以将用户名添加到该文件。
如果配置文件 /etc/at.allow 存在,则只有该文件中的用户可以使用命令。
如果两个配置文件都不存在,则只有具有管理员权限的用户可以使用。

  1. At Command in Linux

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK