上一篇
Tiêu đề: Nohup Leave No Trace: A Command Tour Without Nohup.out
Trên các hệ thống Linux và Unix, lệnh nohup là một công cụ mà nhiều người dùng đã quen thuộc, cho phép người dùng chạy các lệnh hoặc tập lệnh mà không dừng quá trình ngay cả sau khi thoát khỏi thiết bị đầu cuối. Theo mặc định, nohup tạo ra một tệp có tên nohup.out để lưu đầu ra của quá trình. Tuy nhiên, đôi khi, chúng tôi muốn thực hiện một số lệnh và bỏ qua đầu ra của chúng, điều này đặc biệt hữu ích khi chúng tôi không cần tạo tệp nohup.out. Tiếp theo, chúng ta hãy khám phá cách chạy lệnh nohup ở chế độ no-out.
1. Hiểu cách sử dụng cơ bản của lệnh nohup
Đầu tiên, hãy xem lại cách sử dụng lệnh nohup cơ bản. Nhập định dạng lệnh sau vào thiết bị đầu cuối:
''Ầm ầm
nohupcommand>/dev/null2>&1&
```
Ở đây 'lệnh' là lệnh hoặc tập lệnh bạn muốn chạy. '>/dev/null' có nghĩa là chuyển hướng đầu ra tiêu chuẩn đến một thiết bị trống (tức là bỏ đầu ra), trong khi '2>&1' là nơi lỗi tiêu chuẩn được chuyển hướng đến đầu ra tiêu chuẩn (tức là loại bỏ đầu ra lỗi cùng một lúc) và cuối cùng '&' là để lệnh chạy trong nền. Tuy nhiên, điều này vẫn sẽ dẫn đến một tệp nohup.out trống. Chúng tôi cần thêm thủ thuật để tránh bất kỳ việc tạo tệp đầu ra nào.
2. Mẹo nâng cao: Tránh tạo tệp nohup.out
Nếu bạn không muốn tạo bất kỳ tệp đầu ra nào, bạn có thể chuyển hướng đầu ra của lệnh trực tiếp đến '/ dev / null' và sử dụng cấu trúc thư mục đặc biệt để xử lý các tệp nhật ký hoặc đơn giản hơn là không làm gì cả. Điều này có thể được thực hiện bằng cách để lại cả dấu vết stdout và stderror trên dòng lệnh. Các bước cụ thể như sau:
''Ầm ầm
nohupcommand>/dev/null2>&-&echo$!>>your_process_file phương pháp được đề xuất để lưu ID quy trình cho các hoạt động tiếp theo như quản lý quy trình và tìm kiếm nhật ký. Ghi ID quy trình vào một tệp tùy chỉnh để theo dõi và quản lý sau này thông qua các tập lệnh hoặc các phương tiện khác. Đồng thời, loại bỏ bất kỳ lỗi nào vào trạng thái bị bỏ qua (được đặt thành xử lý thả stderr) không còn tạo ra các hoạt động tệp bổ sung với độ trễ I / O và sự không chắc chắn) tương tự như kỳ vọng thực sự bắt đầu một quy trình độc lập (một giải pháp đơn giản tương đương với quy trình từng bước) Logic được phân tách tốt hơn, sự phụ thuộc và vấn đề được dẫn trực tiếp đến cơ sở kỹ thuật và tư duy, nguồn nhất quán, phương pháp lý thuyết là cùng một giao diện, việc đóng gói nội dung được nâng cấp được cá nhân hóa và mở, người dùng dễ hiểu và hồ sơ sẽ không bị mất, để đảm bảo tính nhất quán và không có sự dư thừa của đầu ra, và không bỏ sót đầu ra
bashbashshell chuyển hướng đầu ra và luồng lỗi của quá trình dòng lệnh trực tiếp đến /dev/null, sau đó xuất ID quy trình (PID) của quy trình hiện tại sang một tệp cụ thể để quản lý hoặc giám sát. Bằng cách này, bạn không cần phải quan tâm đến bất kỳ nhật ký bổ sung hoặc tệp đầu ra nào. Chỉ cần kiểm tra các tệp quy trình tùy chỉnh của bạn thường xuyên để xem tất cả các quy trình đang chạy trong nền. Tất nhiên, phương pháp này không buộc tạo tệp nhật ký mà chỉ đạt được bản ghi không theo dõi của quá trình thực thi (chỉ trong các tình huống đặc biệt, cần tránh tạo tệp nhật ký), tương tự như ý tưởng về thư viện liên kết động, để giải quyết vấn đề dự phòng tài nguyên và quản lý phi tập trung trong thư viện tĩnh, rất phù hợp với tính linh hoạt và hiệu quả của việc xây dựng hệ thống, đồng thời đảm bảo tính ổn định và bảo mật của mã, đảm bảo tính toàn vẹn và nhất quán của quá trình thực thi chương trình, không phụ thuộc vào sự can thiệp của môi trường bên ngoài, có thể đáp ứng tốt nhu cầu của môi trường sản xuất, phù hợp với ý tưởng mô-đun trong các nguyên tắc thiết kế phần mềm。 Phương pháp này phù hợp với các kịch bản có yêu cầu cao về quản lý hệ thống nhưng yêu cầu phân tích nhật ký không cao. (Tránh các nỗ lực thiết kế và gỡ lỗi quá mức, thêm phức tạp, lãng phí thời gian và tài nguyên). Điều quan trọng cần lưu ý là chạy chương trình theo cách này có nghĩa là nếu chương trình bất thường, sẽ không có lời nhắc đầu ra, vì vậy phải rất thận trọng trong quá trình thực thi, điều này có thể mang lại các vấn đề tiềm ẩn, bao gồm mất dữ liệu, lỗi, chẩn đoán khó khăn và các nhược điểm khác, có thể không phù hợp với một số tình huống và cần đưa ra lựa chọn hợp lý theo từng trường hợp cụ thể). Xin lưu ý: Hãy lựa chọn phương pháp này cẩn thận theo kịch bản thực tế của bạn để tránh những rủi ro có thể xảy ra và đảm bảo rằng sự ổn định và bảo mật của hệ thống không bị ảnh hưởng)