侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux batch命令教程:如何在系统空闲时执行命令或脚本(附实例详解和注意事项)

Linux batch命令介绍

batch命令是用来在指定的时间或条件下执行一系列的命令或脚本。batch命令是at命令的一种变体,它会将任务添加到at队列中,但是只有当系统的负载平均值低于1.5或者指定的值时,才会执行任务。batch命令可以让你在系统空闲的时候运行一些低优先级的任务,避免影响系统的性能。

Linux batch命令适用的Linux版本

batch命令是一个标准的Linux命令,它适用于大多数的Linux发行版,如Ubuntu, Debian, Fedora, CentOS等。但是,要使用batch命令,你需要先安装at包,因为batch命令依赖于atd服务。你可以使用以下命令来检查和安装at包:

[linux@bashcommandnotfound.cn ~]$ sudo apt-get install at # Ubuntu, Debian
[linux@bashcommandnotfound.cn ~]$ sudo yum install at # CentOS 7, Fedora
[linux@bashcommandnotfound.cn ~]$ sudo dnf install at # CentOS 8, Fedora

安装完成后,你需要启动和启用atd服务,以便batch命令可以正常工作:

[linux@bashcommandnotfound.cn ~]$ sudo systemctl start atd
[linux@bashcommandnotfound.cn ~]$ sudo systemctl enable atd

Linux batch命令的基本语法

batch命令的基本语法如下:

batch [-f file] [-m] [-q queuename] [-t time] [timespec...]

其中,各个选项或参数的含义如下:

  • -f file: 指定一个包含要执行的命令或脚本的文件,而不是从标准输入读取。
  • -m: 发送邮件通知用户任务的执行结果,默认情况下,只有当任务执行失败时才会发送邮件。
  • -q queuename: 指定一个at队列,用来存放batch任务,默认的队列是b。
  • -t time: 指定一个时间戳,用来表示任务的最早执行时间,格式为CCYYMMDDhhmm.ss。
  • timespec...: 指定一个或多个时间规范,用来表示任务的最早执行时间,格式为[[[[CC]YY]MM]DD]hhmm[.ss]。

Linux batch命令的常用选项或参数说明

batch命令的常用选项或参数有以下几个:

选项或参数说明
-f file指定一个包含要执行的命令或脚本的文件,而不是从标准输入读取。
-m发送邮件通知用户任务的执行结果,默认情况下,只有当任务执行失败时才会发送邮件。
-q queuename指定一个at队列,用来存放batch任务,默认的队列是b。
-v显示任务的执行时间,而不是将任务添加到at队列中。
-l列出当前用户的所有at和batch任务。

Linux batch命令的实例

以下是一些使用batch命令的实例:

实例1:使用batch命令在系统空闲时执行一个命令

假设你想在系统空闲时执行一个命令,比如打印当前日期和时间,你可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ batch
at> date
at> <EOT>
job 1 at Mon Dec 18 10:10:00 2023

这里,你输入了batch命令后,进入了一个交互式的at提示符,你可以输入你想执行的命令,然后按Ctrl+D结束输入。batch命令会返回一个任务的编号和最早执行时间,这里是job 1 at Mon Dec 18 10:10:00 2023,表示这个任务的编号是1,最早会在2023年12月18日10点10分执行,但是只有当系统的负载平均值低于1.5时,才会真正执行。你可以使用atq命令来查看at队列中的任务:

[linux@bashcommandnotfound.cn ~]$ atq
1   Mon Dec 18 10:10:00 2023 b linux

这里,你可以看到任务的编号,执行时间,队列名和用户名。你也可以使用at -c命令来查看任务的具体内容:

[linux@bashcommandnotfound.cn ~]$ at -c 1
#!/bin/sh
# atrun uid=1000 gid=1000
# mail linux 0
umask 22
...
date

这里,你可以看到任务的执行环境和命令。当任务执行完成后,你会收到一封邮件通知你任务的执行结果,你可以使用mail命令来查看邮件:

[linux@bashcommandnotfound.cn ~]$ mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/mail/linux": 1 message 1 new
>N  1 linux@bashcommandnotfound.cn Mon Dec 18 10:10  19/604   Output from your job   1
? 1
Message  1:
From linux@bashcommandnotfound.cn  Mon Dec 18 10:10:00 2023
Date: Mon, 18 Dec 2023 10:10:00 +0800
From: linux@bashcommandnotfound.cn (linux)
To: linux@bashcommandnotfound.cn
Subject: Output from your job   1
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/linux>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=linux>
X-Cron-Env: <USER=linux>

Mon Dec 18 10:10:00 CST 2023
?

这里,你可以看到邮件的内容,包括任务的编号,执行时间和输出。你可以按q退出邮件程序。

实例2:使用batch命令在系统空闲时执行一个脚本

假设你想在系统空闲时执行一个脚本,比如一个名为hello.sh的脚本,内容如下:

#!/bin/bash
echo "Hello, world!"

你可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ batch -f hello.sh
job 2 at Mon Dec 18 10:15:00 2023

这里,你使用了-f选项,指定了一个包含要执行的脚本的文件,batch命令会返回一个任务的编号和最早执行时间,这里是job 2 at Mon Dec 18 10:15:00 2023,表示这个任务的编号是2,最早会在2023年12月18日10点15分执行,但是只有当系统的负载平均值低于1.5时,才会真正执行。你可以使用atq命令来查看at队列中的任务:

[linux@bashcommandnotfound.cn ~]$ atq
2   Mon Dec 18 10:15:00 2023 b linux
1   Mon Dec 18 10:10:00 2023 b linux

这里,你可以看到任务的编号,执行时间,队列名和用户名。你也可以使用at -c命令来查看任务的具体内容:

[linux@bashcommandnotfound.cn ~]$ at -c 2
#!/bin/sh
# atrun uid=1000 gid=1000
# mail linux
...

当任务执行完成后,你会收到一封邮件通知你任务的执行结果,你可以使用mail命令来查看邮件:

[linux@bashcommandnotfound.cn ~]$ mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/mail/linux": 2 messages 2 new
>N  1 linux@bashcommandnotfound.cn Mon Dec 18 10:10  19/604   Output from your job   1
 N  2 linux@bashcommandnotfound.cn Mon Dec 18 10:15  20/605   Output from your job   2
? 2
Message  2:
From linux@bashcommandnotfound.cn  Mon Dec 18 10:15:00 2023
Date: Mon, 18 Dec 2023 10:15:00 +0800
From: linux@bashcommandnotfound.cn (linux)
To: linux@bashcommandnotfound.cn
Subject: Output from your job   2
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/linux>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=linux>
X-Cron-Env: <USER=linux>

Hello, world!
?

这里,你可以看到邮件的内容,包括任务的编号,执行时间和输出。你可以按q退出邮件程序。

实例3:使用batch命令在系统空闲时执行一个命令,并指定最早执行时间

假设你想在系统空闲时执行一个命令,比如打印当前的工作目录,但是你想指定一个最早执行时间,比如2023年12月18日11点,你可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ batch 111200
at> pwd
at> <EOT>
job 3 at Mon Dec 18 11:12:00 2023

这里,你在batch命令后面加了一个时间规范,表示任务的最早执行时间是2023年12月18日11点12分,然后你输入了你想执行的命令,然后按Ctrl+D结束输入。batch命令会返回一个任务的编号和最早执行时间,这里是job 3 at Mon Dec 18 11:12:00 2023,表示这个任务的编号是3,最早会在2023年12月18日11点12分执行,但是只有当系统的负载平均值低于1.5时,才会真正执行。你可以使用atq命令来查看at队列中的任务:

[linux@bashcommandnotfound.cn ~]$ atq
3   Mon Dec 18 11:12:00 2023 b linux
2   Mon Dec 18 10:15:00 2023 b linux
1   Mon Dec 18 10:10:00 2023 b linux

这里,你可以看到任务的编号,执行时间,队列名和用户名。你也可以使用at -c命令来查看任务的具体内容:

[linux@bashcommandnotfound.cn ~]$ at -c 3
#!/bin/sh
# atrun uid=1000 gid=1000
# mail linux 0
umask 22
...
pwd

这里,你可以看到任务的执行环境和命令。当任务执行完成后,你会收到一封邮件通知你任务的执行结果,你可以使用mail命令来查看邮件:

[linux@bashcommandnotfound.cn ~]$ mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/mail/linux": 3 messages 3 new
>N  1 linux@bashcommandnotfound.cn Mon Dec 18 10:10  19/604   Output from your job   1
 N  2 linux@bashcommandnotfound.cn Mon Dec 18 10:15  20/605   Output from your job   2
 N  3 linux@bashcommandnotfound.cn Mon Dec 18 11:12  21/606   Output from your job   3
? 3
Message  3:
From linux@bashcommandnotfound.cn  Mon Dec 18 11:12:00 2023
Date: Mon, 18 Dec 2023 11:12:00 +0800
From: linux@bashcommandnotfound.cn (linux)
To: linux@bashcommandnotfound.cn
Subject: Output from your job   3
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/linux>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=linux>
X-Cron-Env: <USER=linux>

/home/linux
?

这里,你可以看到邮件的内容,包括任务的编号,执行时间和输出。你可以按q退出邮件程序。

Linux batch命令的注意事项

使用batch命令时,你需要注意以下几点:

  • batch命令依赖于atd服务,所以你需要先安装和启动at包,否则你会收到以下错误信息:
[linux@bashcommandnotfound.cn ~]$ batch
-bash: batch: command not found
  • batch命令会将任务添加到at队列中,你可以使用atq命令来查看队列中的任务,使用atrm命令来删除队列中的任务,使用at -c命令来查看任务的内容。
  • batch命令会在任务执行完成后发送邮件通知用户任务的执行结果,你可以使用mail命令来查看邮件,或者使用-m选项来关闭邮件通知。
  • batch命令会根据系统的负载平均值来决定何时执行任务,你可以使用uptime命令来查看系统的负载平均值,或者使用-l选项来指定一个自定义的负载平均值。
  • batch命令会在任务执行时使用当前的环境变量,你可以使用env命令来查看当前的环境变量,或者使用-v选项来显示任务的执行时间,而不是将任务添加到at队列中。
0

评论区