Tự động hóa rất tốt, nhưng không phải ai cũng biết cách để tự động hóa các tác vụ. Tuy nhiên, việc có thể lên lịch tác vụ cho máy tính vào một thời điểm cụ thể cũng hay không kém. Vậy nên trong bài viết này, mình sẽ hướng dẫn các bạn cách lên lịch tác vụ bằng lệnh at trong Linux nhé.
Lệnh at là gì?
at là một lệnh Linux cho phép bạn lên lịch các công việc cho một ngày giờ cụ thể. Đó là tự động hóa được thực hiện dễ dàng từ Terminal.
Cách cài đặt
Trên Linux, lệnh at có thể đã được cài đặt mặc định. Bạn có thể xác minh nó đã được cài đặt hay chưa bằng lệnh at -V
:
$ at -V at version x.y.z
Nếu bạn không tìm thấy lệnh at, hầu hết các bản phân phối Linux hiện đại đều cung cấp gói cài đặt lệnh at cho bạn.
Bạn cũng có thể cần khởi động at daemon, được gọi là atd. Trên hầu hết các hệ thống Linux, bạn sử dụng lệnh systemctl để kích hoạt các dịch vụ và cho phép chúng tự động khởi động từ bây giờ trở đi:
$ sudo systemctl enable --now atd
Cách lên lịch tác vụ tương tác với lệnh at
Trước tiên, bạn cần tạo một sự kiện vào thời điểm nào đó và sau đó bạn chỉ định những gì bạn muốn xảy ra.
Ví dụ: hãy thử lên lịch bằng cách tạo một nhiệm vụ trong vài phút tới. Chỉ cần làm một cái nhiệm vụ đơn giản thôi. Để thoát khỏi terminal, hãy nhấn Ctrl + D trên bàn phím của bạn.
$ at 11:20 AM warning: commands will be executed using /bin/sh at> echo "hello world" > ~/at-test.txt at> <EOT> job 3 at Mon Jul 26 11:20:00 2021
Như bạn có thể thấy, at sử dụng các định nghĩa thời gian trực quan và tự nhiên. Bạn không cần biết hết 24 giờ hoặc chuyển sang UTC. Nói chung, bạn có thể sử dụng bất kỳ ký hiệu thời gian nào chẳng hạn như noon, 1:30 PM, 13:37,… để mô tả thời điểm bạn muốn.
Chờ một vài phút và sau đó xem chữ “hello world” đã được ghi vào file at-text.txt hay chưa bằng lệnh cat.
$ cat ~/at-test.txt hello world
Cách lên lịch tác vụ với lệnh at
Bạn không cần phải viết tác vũ trên terminal để lên lịch công việc với at. Thay vào đó, bạn có thể sử dụng lệnh echo hoặc printf. Trong ví dụ này, mình sẽ sử dụng now để trì hoãn tác vụ đó trong 1 phút.
$ echo "echo 'hello again' >> ~/at-test.txt" | at now +1 minute
Sau một phút, bạn cần xác nhận tác vụ đã được hoàn thành bằng lệnh cat.
$ cat ~/at-test.txt hello world hello again
Các tùy chọn thời gian
Lệnh at khá dễ thao tác với các tùy chọn thời gian. Bạn có thể chọn giữa nhiều định dạng, tùy thuộc vào định dạng nào thuận tiện nhất cho bạn:
YYMMDDhhmm
[.ss] (viết tắt của năm, tháng, ngày, giờ, phút và giây)CCYYMMDDhhmm
[.ss] (đầy đủ năm, tháng, ngày, giờ, phút và giây)now
midnight
noon
teatime
(4 PM)AM
PM
Thời gian và ngày tháng có thể là tuyệt đối hoặc thêm dấu cộng (+) để làm cho chúng tương đối so với bây giờ.
minutes
hours
days
weeks
months
years
Cú pháp ngày và giờ
Lệnh at ít thoải mái hơn khi thao tác với ngày giờ. Phải ghi thời gian trước, sau đó là ngày, mặc dù ngày đó được mặc định là ngày hiện tại và chỉ được lên lịch tác vụ cho một ngày nào đó trong tương lai.
Ví dụ:
$ echo "rsync -av /home/tux me@myserver:/home/tux/" | at 3:30 AM tomorrow $ echo "/opt/batch.sh ~/Pictures" | at 3:30 AM 08/01/2022 $ echo "echo hello" | at now + 3 days
Xem hàng đợi tác vụ
Bạn có thể xem các công việc mình đã lên lịch trên Linux bằng lệnh atq:
$ atq 10 Thu Jul 29 12:19:00 2021 a tux 9 Tue Jul 27 03:30:00 2021 a tux 7 Tue Jul 27 00:00:00 2021 a tux
Để xóa một công việc khỏi hàng đợi, hãy sử dụng lệnh atrm. Để loại bỏ công việc số 7:
$ atrm 7 $ atq 10 Thu Jul 29 12:19:00 2021 a tux 9 Tue Jul 27 03:30:00 2021 a tux
Ngoài ra, bạn cũng có thể xem thêm 10 lệnh Linux nguy hiểm bạn tuyệt đối không nên thử tại đây.