上一篇
Hướng dẫn ví dụ Bashnohup: Chạy lệnh trong nền và bỏ qua cúp máy
I. Giới thiệu
Trong hệ thống Linux, chúng ta thường cần chạy một số tác vụ dài hạn trong nền, chẳng hạn như tải xuống các tệp lớn, xử lý dữ liệu, v.v. Trong trường hợp này, chúng tôi muốn các tác vụ tiếp tục chạy ngay cả khi chúng tôi thoát khỏi thiết bị đầu cuối hoặc đóng phiên. Lệnh nohup trong Bash thực hiện điều đó. Bài viết này sẽ trình bày chi tiết cách chạy lệnh trong nền trong bash bằng lệnh nohup và bỏ qua việc gác máy.
2. Lệnh nohup là gì?
Nohup là chữ viết tắt của "nohangup", có nghĩa là không treo. Lệnh này tiếp tục phiên đầu cuối sau khi quá trình con được bắt đầu và tiến trình con tiếp tục chạy ngay cả khi phiên bị ngắt kết nối hoặc đăng xuất. Đây là một công cụ thực hiện điều này bằng cách lưu đầu vào dòng lệnh vào một tệp. Do đó, tất cả các lệnh chúng ta cần để chạy trên terminal có thể được xử lý bởi nohup. Điều này rất hữu ích cho các chương trình dài hạn của chúng tôi. Trong hầu hết các trường hợp, chúng ta có thể sử dụng lệnh này trong các tập lệnh của mình. Đây là cú pháp cơ bản của lệnh nohup:
nohupcommand>file2>&1&
Trong số đó, "lệnh" là lệnh để chạy, "tệp" là tệp được sử dụng để lưu đầu ra, "2>&1" là chuyển hướng lỗi tiêu chuẩn sang đầu ra tiêu chuẩn và "&" có nghĩa là chạy trong nền. Bằng cách này, ngay cả khi thiết bị đầu cuối bị đóng hoặc phiên bị ngắt kết nối, lệnh vẫn tiếp tục chạy và đầu ra được lưu vào tệp. Nếu không có tệp đầu ra nào được chỉ định, đầu ra là tệp nohup.out trong thư mục hiện tại theo mặc định. Đây là cách hầu hết người dùng sử dụng công cụ này theo mặc định. Độ dài của tệp này sẽ bị giới hạn bởi kích thước bộ nhớ của hệ điều hành. Nếu tệp đầu ra được tạo bởi lệnh của bạn quá lớn hoặc có giới hạn hạn ngạch về dung lượng lưu trữ bạn muốn sử dụng (đặc biệt là trên các dịch vụ lưu trữ chia sẻ Linux), bạn sẽ cần tạo các cấu hình phức tạp hơn về cách thực hiện các lệnh của mình. Trong trường hợp này, chúng ta có thể sử dụng đường ống và lệnh chuyển hướng để quản lý vị trí lưu trữ và kích thước nội dung của các tệp đầu ra. Chúng ta sẽ đi vào chi tiết hơn về các cách sử dụng nâng cao này sau. Nhưng trước tiên, chúng ta hãy xem xét một ví dụ đơn giản về cách sử dụng lệnh nohup. Giả sử chúng tôi muốn tải xuống một tệp trong nền và quá trình tải xuống tiếp tục thực hiện ngay cả khi chúng tôi thoát khỏi thiết bị đầu cuối. Đây là cách chúng ta có thể làm điều đó:
3. Ví dụ: Sử dụng nohup để tải xuống tệp
Giả sử chúng tôi đang sử dụng wget để tải xuống một tệp lớn và chúng tôi muốn có thể tiếp tục tải xuống tệp này ngay cả khi chúng tôi đóng cửa sổ đầu cuối. Chúng ta có thể sử dụng lệnh sau:
Với lệnh này, nohupwgethttp://example.com/largefile.zip>download.log2>&1&1, chúng tôi chạy tác vụ tải xuống ở chế độ nền và chuyển hướng tất cả đầu ra đến một tệp có tên là download.log. Sau đó, ngay cả khi chúng tôi thoát khỏi thiết bị đầu cuối hoặc khởi động lại máy tính, wget vẫn sẽ hoàn tất việc tải xuống tệp. Sau khi hoàn tất tải xuống, bạn có thể trực tiếp tìm tệp download.log và kiểm tra tiến trình của tác vụ hoặc các thông báo lỗi có thể xảy ra (chẳng hạn như khi lệnh bắt đầu ở chế độ nền không chính xác). Chúng tôi cũng có thể xem nhật ký để kiểm tra xem chương trình đã được chạy thành công chưa. Lệnh này phù hợp với hầu hết các loại tác vụ chạy chương trình, bao gồm các tác vụ xử lý dữ liệu phức tạp và các tác vụ dài hạn khác, miễn là chúng ta đặt các tác vụ này ở chế độ nền để chạy, chúng ta có thể tránh được vấn đề gián đoạn tác vụ do đóng thiết bị đầu cuối. Đồng thời, chúng ta cũng có thể sử dụng các công cụ khác để giám sát và quản lý các tác vụ nền này, chẳng hạn như sử dụng các lệnh như ps và kill để xem và quản lý trạng thái của các quy trình nền và kết thúc các tác vụ nền. Trên đây là phần giới thiệu cơ bản và hướng dẫn ví dụ về cách sử dụng lệnh nohup trong bash để chạy lệnh ở chế độ nền và bỏ qua việc treo máy, mình hy vọng nó sẽ giúp ích cho các bạn.