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队列中。
评论区