Những điều cần biết
- Dùng lệnh sleep kèm thời gian: s=giây, m=phút, h=giờ, d=ngày (ví dụ: sleep 5s tạm dừng script 5 giây).
- Dùng man sleep để xem thêm.
Bài viết giải thích cách dùng lệnh sleep Linux để tạm dừng script bash, cùng các trường hợp khác. Lệnh sleep riêng lẻ không quá hữu ích. Tuy nhiên, như một phần của script, nó có nhiều cách ứng dụng. Ví dụ: dùng để tạm dừng script trước khi thử lại lệnh thất bại lần đầu.
Ví dụ sử dụng lệnh sleep
Hãy tưởng tượng bạn có script xử lý file được tải từ server khác. Script không nên bắt đầu copy cho đến khi tất cả file tải xong. Quá trình tải do script riêng chạy trước script của bạn.
Script copy file có thể chứa vòng lặp kiểm tra xem tất cả file đã tải xong chưa (bằng cách kiểm tra có tìm thấy 50 file trước khi bắt đầu copy).
Không có lý do gì để script kiểm tra liên tục vì điều này tốn thời gian CPU. Thay vào đó, bạn có thể tạm dừng vài phút giữa mỗi lần kiểm tra trước khi thử lại. Lệnh sleep hoàn hảo cho tình huống này.
Cách dùng lệnh sleep
Để dùng lệnh sleep Linux, nhập sau vào cửa sổ terminal:
sleep 5s
Lệnh trên làm terminal tạm dừng 5 giây trước khi quay lại dòng lệnh.
Lệnh sleep yêu cầu từ khóa sleep, theo sau là số muốn tạm dừng và đơn vị đo.
Bạn có thể chỉ định độ trễ theo giây, phút, giờ hoặc ngày.
- s: Giây
- m: Phút
- h: Giờ
- d: Ngày
Khi tạm dừng script trong nhiều ngày, hãy dùng cron job để chạy script theo lịch trình đều đặn, thay vì để script chạy ngầm nhiều ngày.
Cron job là lệnh hoặc script Linux bạn có thể lên lịch chạy ở thời điểm hoặc ngày cố định. Hữu ích cho tác vụ lặp lại trong thời gian dài.
Số cho khoảng thời gian sleep không nhất thiết phải là số nguyên. Cũng có thể dùng số thực (floating-point).
Ví dụ cú pháp bao gồm phân số giây:
sleep 3.5s
Ví dụ sử dụng lệnh sleep
Script sau minh họa dùng sleep tạo đồng hồ đếm ngược trên terminal:
#!/bin/bash x=10 while [ $x -gt 0 ] do sleep 1s clear echo "$x giây cho đến lúc phóng" x=$(( $x - 1 )) done
Cách script hoạt động:
- Script đặt biến x = 10.
- Vòng lặp while tiếp tục lặp بينما giá trị x lớn hơn 0.
- Lệnh sleep tạm dừng script 1 giây mỗi vòng lặp.
- Phần còn lại xóa màn hình mỗi lần lặp, hiển thị thông báo "x giây cho đến lúc phóng", trừ 1 khỏi giá trị x.
Nếu không có lệnh sleep, script sẽ chạy hết trong chớp mắt, thông báo hiển thị quá nhanh.
Cách dùng các công tắc của sleep
Lệnh sleep chỉ có một vài công tắc.
Công tắc --help hiển thị file trợ giúp cho sleep. Có thể làm tương tự bằng lệnh man:
man sleep
Công tắc --version hiển thị phiên bản sleep cài trên hệ thống.
Thông tin từ --version bao gồm:
- Số phiên bản
- Chi tiết bản quyền
- Giấy phép
- Tác giả
Tạm dừng lệnh terminal với sleep
Một ứng dụng hay khác của sleep là tạm dừng các lệnh bạn gõ trong terminal.
Nếu muốn, bạn có thể gõ hai lệnh liên tiếp, chờ lệnh đầu xong rồi gõ lệnh thứ hai.
Tuy nhiên, cách nhanh hơn là gõ hai lệnh trên một dòng, chèn sleep giữa các lệnh:
$ cd /thu_muc_cua_toi/ && sleep 3 && ls
Cách lệnh này hoạt động:
- Lệnh cd /thu_muc_cua_toi/ chuyển thư mục.
- Lệnh sleep 3 chờ 3 giây cho lệnh cd hoàn tất.
- Lệnh ls thực thi và hiển thị nội dung thư mục.
Với ví dụ đơn giản này, sleep chỉ tiết kiệm chút thời gian. Nhưng nếu có danh sách lệnh dài, khả năng gõ các lệnh trên một dòng giúp tiết kiệm thời gian đáng kể.