首页 > 系统教程 > 操作系统 > 如何使用Linux在命令中安排任务

如何使用Linux在命令中安排任务

Joseph Gordon-Levitt
发布: 2025-03-22 10:34:11
原创
713 人浏览过

In Linux, when we want to make our computer perform tasks automatically, we use something called scheduling. It's like telling the computer, "Do this thing at this time." This makes our work easier because we don't have to remember to do those tasks ourselves. One way to do this is by using the Linux at command. The at command can serve as an alternative to the cron command when you have tasks that need to run only once at a specific time in the future.x

The "at" command lets us schedule tasks to happen at specific times. So, if we want the computer to do something like creating a backup or sending an email, we can use the "at" command to tell it when to do it. It's like setting an alarm for your computer to do things for you.

In this guide, we'll dive into the Linux at command and see how it helps us schedule tasks effortlessly. We'll explore 11 at command examples for scheduling tasks in Linux. Whether you're new to Linux or already familiar, learning about the "at" command can make your life simpler by automating tasks on your computer.

Table of Contents

What is Linux at Command?

The at command in Linux is used to schedule a one-time task to be executed at a specific time in the future. It allows you to specify a particular time when the command or script should run.

The at command can be useful for automating one-time tasks, such as backing up files, running scripts, or sending emails.

cron Vs at

When you're in the process of scheduling tasks, you might encounter the terms "cron" and "at" and find yourself questioning the distinctions between the cron and at commands in the Linux environment.

The at command and the cron command are both used for scheduling tasks in Linux, but they have distinct differences in terms of how they work and when they are best suited to use.

The cron utility enables you to schedule recurring tasks at specific intervals, while the at command enables you to specify one-time actions to be performed at a desired time. For instance, you could utilize crontab to schedule a daily backup at 2 a.m., ensuring repetitive execution. Conversely, you could use the at command to create a reminder for a later appointment within the day, focusing on a single occurrence.

In essence, we usually use the at command for one-time tasks scheduled at specific moments, and use the cron command for automated, recurring tasks that need to be executed on a regular basis.

The choice between them depends on the nature of your tasks and how often you want them to run.

Install at Command in Linux

The at command is usually pre-installed on many Linux distributions. However, if it's not available on your system, you can install it using package managers specific to your distribution. Here are the installation steps for some common Linux distributions:

Alpine Linux:

To install at command in Alpine Linux, run:

$ sudo apk add at
登录后复制

Arch Linux / Endeavour OS / Manjaro Linux:

Open a terminal and run the following command:

$ sudo pacman -S at
登录后复制

Debian / Ubuntu / Linux Mint / Pop!_OS:

Run the following commands to install 'at' in Debian-based systems:

$ sudo apt update
$ sudo apt install at
登录后复制

RHEL / CentOS Stream / Fedora / AlmaLinux / Rocky Linux:

Open a terminal and run the following command:

$ sudo dnf install at
登录后复制

In older RHEL systems, use yum instead of dnf.

$ sudo yum install at
登录后复制

After the installation is complete, you can start using the at command to schedule tasks at specific times.

Start 'at' Service

The atd service should start automatically after installation. If it's not running, you can start and enable it with the following commands:

$ sudo systemctl start atd$ sudo systemctl enable atd
登录后复制

Linux at Command Examples

The Linux at command is easy to use. You simply specify the time you want the task to run, and the command you want to run. The at command will then create a job file and store it in the /var/spool/cron/atjobs/ directory. When the specified time arrives, the at command will execute the job file.

Here are some examples of using the at command to schedule one-time tasks in Linux.

1. Scheduling Jobs Interactively using 'at' Command

The at command enables you to schedule jobs interactively by using the following syntax:

at [runtime]
登录后复制

When you run this command, it opens an interactive prompt where you can input the commands that you want to execute at the specified time. Additionally, the command displays a warning indicating the shell (E.g. /bin/sh) that will be used for the scheduled job.

To save the scheduled job and exit the interactive prompt, press Ctrl + D. If you wish to cancel the job before saving it, you can use Ctrl + C.

Take a look at the following example.

$ at 2:37 PM
echo "Hello, Welcome to OSTechNix!" > /tmp/greeting.txt
<Ctrl+D>
登录后复制

如何使用Linux在命令中安排任务

This example will schedule the echo command to run at 2:37 PM. The output "Hello, Welcome to OSTechNix!" will be written to the file /tmp/greeting.txt at the specified time.

After scheduling the job, wait for the specified time to elapse. Once the scheduled time is reached, you can verify whether the message has been saved in the greeting.txt file located in the /tmp directory.

$ sudo cat /tmp/greeting.txt[sudo] password for ostechnix:<strong>Hello, Welcome to OSTechNix!</strong>
登录后复制

如何使用Linux在命令中安排任务

Yes, the Job is successfully executed at the specified time.

In this example, we scheduled the echo "Hello, Welcome to OSTechNix!" > /tmp/greeting.txt command to run at a specific time using the at command. After the scheduled time has passed, we checked the content of the greeting.txt file to verify that the script executed successfully and saved the message as expected.

2. List Scheduled Jobs

You can list all the scheduled jobs in the 'at' queue using command:

$ atq
登录后复制
登录后复制

Sample Output:

4 Wed Aug 8 14:37:00 2023 a ostechnix
登录后复制

The atq command lists the scheduled jobs in the 'at' queue. The displayed information includes the job number, date, time, year, and queue status for the current user's pending tasks. In this case, job number 4 is scheduled to run at 14:37 PM on August 8, 2023 for the user ostechnix.

To view the pending jobs for all users, execute the command with administrative privileges:

$ sudo atq
登录后复制

The above command retrieves the list of pending at jobs, and when executed with sudo, it provides an overview of pending jobs for all users on the system.

You can also use -l flag with 'at' command to view the scheduled jobs.

$ at -l
登录后复制

The at -l is just an alias to atq command.

3. Previewing Scheduled Jobs

Using the -c option, you can preview the contents of a job that was previously scheduled using the at command. This option comes handy when you need to know about the job's details or if you want to check its scheduled time.

To view the contents of a scheduled at job, run the following command

$ at -c [job_number]
登录后复制

Example:

$ at -c 7
登录后复制

Sample Output:

#!/bin/sh
# atrun uid=1000 gid=1000
# mail ostechnix 0
umask 22
LANGUAGE=en_IN:en; export LANGUAGE
PWD=/home/ostechnix; export PWD
LOGNAME=ostechnix; export LOGNAME
XDG_SESSION_TYPE=tty; export XDG_SESSION_TYPE
[...]
登录后复制

To identify the specific job number, you should run the atq command initially. This will provide a list of all pending jobs along with their associated job numbers.

4. Pipe a Job to 'at' Command

You can schedule a job without using the interactive at prompt by sending the commands to at through a UNIX pipe. This involves using commands like echo or printf to pass instructions to the at command while also specifying the desired runtime.

For instance, to schedule an at job that takes the output of the echo command and writes it to a file, you can use:

$ echo "Welcome to the tutorial on Linux 'at' Command" >> Linux_at_command.txt | at now
登录后复制

This job will immediately run.

Sample Output:

warning: commands will be executed using /bin/shjob 6 at Wed Aug 9 12:50:00 2023
登录后复制

After scheduling the job, you can verify its execution by checking the existence of the file using the cat command:

$ cat Linux_at_command.txt 
Welcome to the tutorial on Linux 'at' Command
登录后复制

In this manner, you can efficiently schedule tasks using the at command without needing to interactively input each command separately.

5. Scheduling Scripts

Not just commands, we can also schedule a script to run at a specific time using the at command like below.

at 2:00 AM tomorrow
/path/to/my_script.sh
<Ctrl+D>
登录后复制

This example will schedule the execution of my_script.sh at 2:00 AM on the next day. Please replace the path of the script with your own.

Let us see a practical example, so you can understand it clearly.

1. Create a script called testscript.sh:

$ cat << EOF > testscript.sh
> echo "Hello, Welcome to OSTechNix!" > /tmp/greeting.txt
> EOF
登录后复制

This command uses a heredoc (<<) to create a script called testscript.sh with the content that follows until EOF. The script simply echoes the text "Hello, Welcome to OSTechNix!" into a file named /tmp/greeting.txt.

2. Make the script executable:

$ sudo chmod +x testscript.sh
登录后复制

This command gives the script testscript.sh the execute permission using chmod. Now the script can be executed as a standalone program.

3. Check the current date and time:

$ date
登录后复制

Sample Output:

Wednesday 09 August 2023 12:16:04 PM IST
登录后复制

As you can see, the exact time at the time of running this command is 12:16:04 PM.

4. Let us now schedule the script testscript.sh to run at a later time (E.g. 12:18 PM) using the at command:

$ at 12:18 PM -f ./testscript.sh
登录后复制

Sample Output:

warning: commands will be executed using /bin/sh
job 5 at Wed Aug  9 12:18:00 2023
登录后复制

This command schedules the execution of the testscript.sh script at 12:18 PM on August 11, 2023. The warning message indicates that the commands will be executed using the /bin/sh shell.

5. Check the scheduled jobs in the at queue:

$ atq
登录后复制
登录后复制

Sample Output:

5 Wed Aug 9 12:18:00 2023 a ostechnix
登录后复制

The atq command lists the scheduled jobs in the at queue. In this case, job number 5 is scheduled to run at 12:18 PM on August 9, 2023.

6. Now wait for the specified time to elapse. Once the scheduled time is reached, check again the 'at' queue:

$ atq
登录后复制
登录后复制

The atq command output should now be empty because the scheduled job has already been executed.

7. Check the contents of /tmp/greeting.txt after the script has run:

$ cat /tmp/greeting.txt
登录后复制

Sample Output:

Hello, Welcome to OSTechNix!
登录后复制

如何使用Linux在命令中安排任务

As you see in the above output, the cat command displays the contents of the file /tmp/greeting.txt, which was created by the script testscript.sh.

6. Scheduling Jobs using a Specific Date and Time Format

If you want to schedule a command using a specific date and time format, do:

$ at 01:47PM 2023-08-09
warning: commands will be executed using /bin/sh
at Wed Aug  9 13:47:00 2023
at> echo "This is a scheduled task using a specific date and time format." > /tmp/date.txt
at> <EOT>
job 11 at Wed Aug  9 13:47:00 2023</p>
<p>In this case, the at command is telling the system to schedule a job to run at 01:47 PM on August 9th, 2023.</p>
<p>You can read more about 'Time Expressions' later in this guide.</p>
<h3>7. Send Email Notification on Job Completion</h3>
<p>To send email notifications upon job completion using the at command, you can follow these steps:</p>
<p><strong>1.</strong> Ensure that your system has a working email configuration, and your user account is associated with a valid email address.</p>
<p><strong>2.</strong> To instruct at to send email notifications upon job completion, even if there is no output, you need to specify the -m option when scheduling the job.</p>
<p>For example, to run a script named testscript.sh and receive an email notification upon completion:</p>
<pre class="brush:php;toolbar:false">$ cat testscript.sh | at -m now + 1 hour
登录后复制

In this case, testscript.sh is piped to the at command, and the -m option is used to ensure an email notification is sent when the job completes.

3. Once the job completes, you should receive an email notification at the configured email address associated with your user account. The email will contain information about the job execution.

Keep in mind that the effectiveness of this approach depends on your system's email configuration. If you encounter issues, ensure that your system is set up to send emails and that your user's email address is correctly configured.

8. Schedule Jobs without Email Notification

To prevent receiving email notifications upon job completion, you can utilize the -M option while scheduling an at job.

For instance:

$ echo "testscript.sh" | at -M 02:00
登录后复制

By including the -M option in the at command, you ensure that job execution occurs without generating email notifications upon completion.

This is particularly useful when you want to execute tasks silently without being alerted by email notifications.

9. Remove Scheduled Jobs

To remove a scheduled job using the at command, you can use either the atrm command or use -r option with at command followed by the job ID. Here are the steps for both methods:

9.1. Using atrm command

Identify the job ID of the scheduled job by running the atq command or using the -l option with the at command.

Run the following command to remove the job with the specified job ID:

$ atrm [job_id]
登录后复制

Replace [job_id] with the actual job ID you want to remove.

Example:

1. First, list all scheduled jobs using atq command:

$ atq
登录后复制
登录后复制

Sample Output:

7	Sun Mar 14 13:31:00 2230 a ostechnix
9	Fri Aug  9 13:40:00 3241 a ostechnix
8	Sun Mar 14 13:33:00 2230 a ostechnix
10	Wed Aug  9 13:42:00 3245 a ostechnix
登录后复制

As you can see, there are 4 pending jobs exists.

2. To delete a job, for example the job with the ID 7, run:

$ atrm 7
登录后复制

3. verify if the job is deleted by listing the scheduled jobs :

$ atq
9	Fri Aug  9 13:40:00 3241 a ostechnix
8	Sun Mar 14 13:33:00 2230 a ostechnix
10	Wed Aug  9 13:42:00 3245 a ostechnix
登录后复制

如何使用Linux在命令中安排任务

See? The the 7th job is gone.

9.2 Using at -r Option

Identify the job ID of the scheduled job by running the atq command or using the -l option with the at command.

Run the following command to remove the job with the specified job ID:

$ at -r [job_id]
登录后复制

Replace [job_id] with the actual job ID you want to remove.

Remember that you need appropriate privileges (usually root or sudo access) to remove jobs scheduled by other users. If you're the owner of the job, you can typically remove it without additional permissions.

10. Allow or Deny Users

The /etc/at.allow and /etc/at.deny files are used to control user access to the at and batch commands, which allow users to schedule tasks for later execution. These files determine which users are allowed to submit commands for later execution using the at and batch commands.

Both files have a list of usernames, with each username listed on a separate line. Whitespace is not allowed.

If /etc/at.allow exists, only usernames mentioned in this file are granted permission to use the at command. If /etc/at.allow is empty or doesn't exist, access control is determined by the /etc/at.deny file.

If /etc/at.allow doesn't exist or doesn't grant access to a specific user, the /etc/at.deny file is checked.Users not listed in /etc/at.deny are allowed to use the at and batch commands.

If /etc/at.deny is empty, all users have the privilege to use the at command.

If neither /etc/at.allow nor /etc/at.deny exists, only the superuser (root) is allowed to use the at and batch commands.

The /etc/at.allow file takes precedence over /etc/at.deny file. If a user is listed in both files, access is granted based on /etc/at.allow.

These files provide a simple yet effective means of controlling which users can utilize the at and batch commands to schedule tasks for later execution on the system.

Let us see how to restrict users from using at command with an example.

To restrict users from using the at command, you can utilize the /etc/at.allow and /etc/at.deny files. Here's how you can do it:

10.1. Using /etc/at.deny

Open the /etc/at.deny file with a text editor and add the usernames of the users you want to restrict, each on a separate line. Save and exit the file.

For example, to restrict users "user1" and "user2," you can run:

$ echo "user1" | sudo tee -a /etc/at.deny
$ echo "user2" | sudo tee -a /etc/at.deny
登录后复制

Now switch to any restricted user and try to run any 'at' command:

$ su - user1
$ atq
<strong><mark>You do not have permission to use atq.</mark></strong>
登录后复制

如何使用Linux在命令中安排任务

10.2. Using /etc/at.allow

If you prefer allowing only specific users to use the at command, you can create the /etc/at.allow file and add the usernames of the users who are allowed to use the command, each on a separate line.Save and exit the file.

For example, to allow only "ostechnix" to use the at command, you can run:

$ echo "ostechnix" | sudo tee -a /etc/at.allow
登录后复制

Remember that the /etc/at.allow file takes precedence over the /etc/at.deny file. If a username is listed in both files, the user will be allowed to use the at command.

After making these changes, the users you have restricted will no longer be able to use the at command.

11. Execute Jobs When System Load Permits

The "batch" command carries out tasks when the system's load conditions are favorable. Specifically, it triggers execution when the load average falls below 1.5 or the specified value set during the invocation of the "atd" daemon. This approach helps ensure that the jobs run during periods of lower system activity.

Here's how you can use the batch command to execute jobs when the system load permits:

1. Open a terminal.

2. Type batch and press Enter. This will initiate the batch command and provide you with a prompt where you can enter the commands you want to execute.

3. Enter the commands you want to execute once the system load drops below the threshold. For example:

echo "Job started at $(date)" >> job_log.txt
sleep 5
echo "Job finished at $(date)" >> job_log.txt
登录后复制

In this example, the job logs the start time, waits for 5 seconds using the sleep command, and then logs the finish time.

4. Press Ctrl + D to indicate that you're done entering commands. The commands you entered will be queued for execution when the system's load average is below the threshold.

如何使用Linux在命令中安排任务

5. The system will execute the queued commands when the load average drops below the specified threshold, which is usually around 1.5.

6. Verify if the batch job is completed by viewing the contents of job_log txt file.

$ cat job_log.txt 
Job started at Wednesday 09 August 2023 03:48:06 PM IST
Job finished at Wednesday 09 August 2023 03:48:11 PM IST
登录后复制

Keep in mind that the batch command relies on the system's load conditions, so there might be a delay before your jobs actually run, depending on the load on the system at the moment.

It's worth noting that the actual behavior of the batch command may vary slightly depending on the specific implementation on your system.

Time Expressions

The at command accepts various time formats for scheduling jobs. For instance, you can use HH:MM to schedule a job at a particular time of the day. If that time has already passed, the job is assumed to run on the next day.

Notably, you have the option to specify specific times like midnight, noon, or teatime (4pm). Additionally, you can suffix a time with AM or PM to indicate morning or evening.

You can also indicate the day the job should be executed. This can be done by providing a date in formats such as month-name day (with an optional year), MMDD[CC]YY, MM/DD/[CC]YY, DD.MM.[CC]YY, or [CC]YY-MM-DD. The date specification must follow the time of day specification.

Moreover, you have the flexibility to define relative times, such as now + count time-units. The time-units can be minutes, hours, days, or weeks.

To specify running a job today, you can simply suffix the time with "today." Similarly, suffixing the time with "tomorrow" will schedule the job for the following day.

Examples:

For instance, if you wish to run a job at 2pm 5 days from now, you can use the syntax:

at 2pm + 5 days 
登录后复制

To schedule a job for 11:00am on August 31, you can use:

at 11am Aug 31
登录后复制

For a job at 3am tomorrow, the command would be:

at 3am tomorrow
登录后复制

In cases where you specify a job to run at a time and date in the past, the job will execute as soon as possible. For example, if it's currently 11pm and you schedule a job for 9pm on the same day using at 9pm today, the job is likely to run around 11:05pm.

The following table provides a clear breakdown of the different time expressions and how they can be used to schedule jobs using the at command.

Time Expression Description Example
HH:MM Schedule a job at a specific time of day. at 4pm
midnight, noon, teatime Special times of the day. at midnight
AM or PM Morning or evening time specification. at 8:30AM
month-name day Specify a job's day with an optional year. at 10am Jul 31
MMDD[CC]YY, MM/DD/[CC]YY, DD.MM.[CC]YY, [CC]YY-MM-DD Various date formats. at 03142230 (for March 14, 2023, 10:30 PM)
now + count time-units Relative time specification. at now + 2 hours
today, tomorrow Schedule a job for today or tomorrow. at 1am tomorrow
Linux 'at' Command Time Expression

You can find further details about the time specification format in the file /usr/share/doc/at/timespec.

Linux at Command Cheat Sheet

Here's the Linux at command cheat sheet in a tabular column format. Please print it and keep it nearby for quick reference.

Task Command Example
Schedule at a specific time at at 3:30 PM
Schedule after a delay at now + at now + 2 hours
Schedule using a script file at at 9:00 AM tomorrow -f script.sh
Interactive prompt at
Execute commands at at 5:00 PM <<< "backup.sh"
View pending jobsatq or at -l
Remove a jobatrm or at -r atrm 3 or at -r 3
View job contents at -c at -c 5
Send email notifications echo "command" | at -m echo "backup.sh" | at -m 11:00 PM
Suppress email notifications echo "command" | at -M echo "command" | at -M 8:00 AM
Access help at -h or man at
Linux at Command Cheat Cheat

Remember that the at command's behavior may vary slightly between different Linux distributions. Use this cheat sheet as a quick reference guide for using the at command effectively.

Frequently Asked Questions

Here's a list of FAQs for Linux at and batch commands.

Q: What is the at command in Linux?

A: The at command is a utility in Linux that allows you to schedule one-time tasks or commands to run at a specific time in the future. It's particularly useful for automating tasks without requiring user intervention.

Q: How do I use the at command to schedule jobs?

A: To schedule tasks using Linux at command, follow the steps below:1. Open a terminal.2. Use the following syntax to schedule a job:at [time] [date]For example:at 10:30AM tomorrow3. Press Enter and you'll enter an interactive prompt where you can enter the commands you want to execute.4. Press Ctrl + D when you're done entering commands to schedule the job.

Q: Can I specify a command file instead of typing commands interactively?

A: Yes, you can use the -f option to specify a file containing the commands you want to execute. For example:at 2:00PM -f script.sh

Q: How can I see the list of scheduled jobs?

A: Use the atq command to list the pending jobs along with their job IDs and scheduled times.

Q: Can I view the contents of a scheduled job?

A: Yes, you can use the -c option followed by the job ID to display the contents of a previously scheduled job. For example:at -c 123

Q: How do I remove a scheduled job?

A: You can use the atrm command followed by the job ID to remove a scheduled job. For example:atrm 123

Q: Can I receive email notifications for job completion?

A: By default, the at command sends email notifications about completed jobs. You can enable it even for jobs with no output using the -m option.

Q: Can I disable Email notifications?

A: Yes, you can disable this behavior using the -M option.

Q: What formats can I use for specifying time and date?

A: You can use formats like HH:MM, midnight, noon, teatime, specific dates (e.g., Jul 31, 2023), relative times (e.g., now + 2 hours), today, and tomorrow.

Q: Can I use the at command for recurring tasks?

A: No, the at command is designed for one-time scheduling. For recurring tasks, consider using the cron command.

Q: What is the batch command?

A: The batch command is a utility that allows you to schedule jobs to run when the system's load average drops below a certain threshold, typically around 1.5. It helps ensure that jobs are executed during periods of lower system activity.

Q: How does the batch command work?

A: The batch command schedules jobs to run in a queue when the system's load conditions permit. It monitors the load average and initiates job execution when the load drops below the specified threshold.

Q: How do I use the batch command?

A: The batch command usage is same as at command's.1. Open a terminal.2. Type batch and press Enter to start the batch command.3. Enter the commands you want to execute when the load drops below the threshold.4. Press Ctrl + D to indicate the end of command input.

Q: What kind of jobs are suitable for the batch command?

A: The batch command is ideal for non-urgent tasks that can be executed when the system is less busy. Examples include data backups, log analysis, or resource-intensive tasks that can be postponed until the system load decreases.

Q: How can I check the status of jobs scheduled with batch?

A: You can use the atq command to check the status of pending jobs scheduled with batch. It will display the list of jobs in the queue along with their job IDs.

Q: Can I cancel or remove jobs scheduled with the batch command?

A: Yes, you can cancel scheduled jobs using the atrm command followed by the job ID. For example, atrm 123 will remove job number 123 from the queue.

Q: How can I get help with using the at and batch commands?

A: To access help for the at command, simply type at -h or man at in the terminal. You can also locate the help section for the batch command within the manual page of the at command.

Conclusion

In conclusion, the Linux at command is a handy tool that lets you schedule tasks to happen at specific times in the future. It's like setting an alarm for your computer to do things for you automatically.

So, whether you're new to Linux or an experienced user, the Linux at command can make your life easier by taking care of tasks at the right time.

以上是如何使用Linux在命令中安排任务的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板