Tiêu đề: Nohup & Redirect Output Apps
2024-10-16 21:40:28
tin tức
tiyusaishi
I. Giới thiệu
Trong hệ điều hành Linux hoặc Unix, khi chúng tôi chạy một số chương trình hoặc lệnh trong thiết bị đầu cuối, ngay sau khi thiết bị đầu cuối đóng, các chương trình này cũng sẽ bị chấm dứt. Tuy nhiên, đôi khi chúng tôi muốn chương trình tiếp tục chạy ngay cả khi thiết bị đầu cuối đã đóng. Trong trường hợp này, bạn cần sử dụng lệnh "nohup" để thực hiện việc này. Bài viết này sẽ trình bày chi tiết cách sử dụng lệnh nohup và cách lưu kết quả chạy của chương trình vào một tệp bằng cách chuyển hướng đầu ra.
2. Giới thiệu về lệnh nohup
Chức năng chính của lệnh nohup là làm cho lệnh được thực thi bởi người dùng bỏ qua tín hiệu gác máy, để chương trình có thể tiếp tục chạy mà không bị chấm dứt. Sau khi đóng thiết bị đầu cuối, các chương trình được bắt đầu bởi lệnh nohup tiếp tục chạy trong nền của hệ thống. Điều này rất tốt cho các chương trình cần chạy trong một thời gian dài.
3. Cách sử dụng lệnh nohup
Cú pháp cơ bản để sử dụng lệnh nohup như sau:
nohupcommand>/dev/null2>&1&
Trong đó:
Lệnh là một chương trình hoặc lệnh mà chúng ta muốn chạy.
/dev/null có nghĩa là chuyển hướng đầu ra đến một thiết bị trống, tức là loại bỏ tất cả thông tin đầu ra. Nếu bạn không chỉ định tệp đầu ra, đầu ra tiêu chuẩn của chương trình sẽ được lưu theo mặc định vào tệp có tên nohup.out trong thư mục hiện tại. Để tránh điều này, chúng tôi thường chuyển hướng đầu ra đến một thiết bị trống.
2>&1 có nghĩa là đầu ra lỗi tiêu chuẩn được chuyển hướng đến đầu ra tiêu chuẩn (mô tả tệp là 1). Vì đầu ra tiêu chuẩn đã được chuyển hướng đến một thiết bị trống, đầu ra sai cũng bị loại bỏ. Cuối cùng & có nghĩa là đặt lệnh vào nền để chạy.
Thứ tư, ứng dụng chuyển hướng đầu ra
Mặc dù chuyển hướng đầu ra đến một thiết bị trống có thể loại bỏ tất cả thông tin đầu ra, nhưng vẫn có những lúc chúng ta vẫn cần xem chương trình chạy như thế nào. Tại thời điểm này, chúng ta có thể chuyển hướng đầu ra thành một tệp để xem xét sau. Chẳng hạn:
nohupcommand>output.log2>&1&
Lệnh trên chuyển hướng cả đầu ra tiêu chuẩn và lỗi của chương trình sang tệp output.log. Bằng cách này, chúng ta có thể thấy chương trình đang chạy như thế nào bằng cách nhìn vào tệp này. Ngoài ra, chúng ta cũng có thể sử dụng lệnh tee để hiển thị cả đầu ra cho thiết bị đầu cuối và lưu vào tệp:
nohupcommand|teeoutput.log&
5. Biện pháp phòng ngừa
Khi sử dụng lệnh nohup, bạn cần chú ý đến các điểm sau:
1. Các chương trình bắt đầu bằng lệnh nohup sẽ chạy trong nền của hệ thống và sẽ không bị chấm dứt ngay cả khi thiết bị đầu cuối bị đóng. Tuy nhiên, nếu bạn đăng xuất hoặc ngắt kết nối, chương trình có thể bị chấm dứt do mất phiên. Để giải quyết vấn đề này, bạn có thể sử dụng lệnh "từ chối" để bỏ qua tín hiệu chấm dứt phiên. Thao tác cụ thể như sau: đầu tiên sử dụng Ctrl + Z để tạm dừng tác vụ nền trước, sau đó nhập lệnh "disown-h" và cuối cùng sử dụng "nohup" để khởi động chương trình. Bằng cách này, chương trình sẽ tiếp tục chạy ngay cả khi bạn đăng xuất hoặc ngắt kết nối.
2. Các chương trình được khởi chạy bằng lệnh nohup không tự động tải các biến môi trường shell và cài đặt môi trường của người dùng. Nếu bạn cần tải các cài đặt này, bạn có thể sử dụng lệnh nguồn trong tập lệnh khởi động để tải tệp cấu hình môi trường tương ứng. Ví dụ: source/home/user/.bashrc. Ngoài ra, bạn có thể sử dụng lệnh env trên dòng lệnh để chỉ định biến môi trường: envVARNAME = valuenohupcommand&. Điều này đảm bảo rằng chương trình đang chạy trong môi trường chính xác. Điều quan trọng cần lưu ý là phương pháp này có thể không hoạt động trong mọi trường hợp, tùy thuộc vào cài đặt môi trường và phụ thuộc của chương trình. Do đó, nó cần được điều chỉnh và thử nghiệm theo tình hình thực tế khi sử dụng. Nhìn chung, khi sử dụng nohup và redirect output, chúng ta cần xem xét cẩn thận và tuân theo các phương pháp hay nhất để đảm bảo chương trình hoạt động đúng và tính chính xác của kết quả để tạo điều kiện thuận lợi cho công việc của chúng ta. Hy vọng bài viết này sẽ giúp bạn hiểu rõ hơn và áp dụng các công cụ này, nâng cao năng suất và chất lượng của bạn trong môi trường Linux, đồng thời thúc đẩy sự hiểu biết và nghiên cứu sâu hơn của bạn về hệ điều hành. (HẾT)