Nohup trong tập lệnh shell được xuất ra tệp
2024-10-25 11:40:38
tin tức
tiyusaishi
I. Giới thiệu
Trong các hệ thống Linux và Unix, chúng ta thường sử dụng các tập lệnh shell để thực hiện các tác vụ nền. Đôi khi chúng tôi muốn các tác vụ này tiếp tục chạy ngay cả khi chúng tôi đóng thiết bị đầu cuối hoặc ngắt kết nối khỏi SSH. Tại thời điểm này, chúng ta có thể sử dụng lệnh nohup để đạt được điều này. Đồng thời, chúng ta cũng cần chuyển hướng đầu ra của lệnh sang một tệp để xem xét và phân tích sau này. Bài viết này sẽ hướng dẫn bạn cách sử dụng lệnh nohup để chuyển hướng đầu ra của tập lệnh shell sang tệp.
2. Giới thiệu về lệnh nohup
nohup là một lệnh Unix và Linux không gác máy, tức là bỏ qua tín hiệu treo máy và cho phép lệnh chạy trong nền cho đến khi nó được thực thi hoặc gặp lỗi. Lệnh này rất tốt cho các tác vụ chạy dài. Khi chúng tôi thoát khỏi thiết bị đầu cuối hoặc ngắt kết nối khỏi SSH, các quy trình thường chạy ở nền trước sẽ bị chấm dứt. Nhưng các quy trình chạy với nohup không bị ảnh hưởng bởi các yếu tố này. Do đó, chúng ta có thể đặt các lệnh cần được thực thi phía sau nohup để thực thi chúng nhằm đạt được mục đích chạy trong nền.
Phần 3: Cách sử dụng nohup để xuất ra tệp
Khi sử dụng lệnh nohup, chúng ta có thể sử dụng ký hiệu chuyển hướng (>) để chuyển hướng đầu ra đến tệp được chỉ định. Bằng cách này, ngay cả khi thiết bị đầu cuối bị đóng hoặc kết nối SSH bị ngắt kết nối, thông tin đầu ra của quá trình nền sẽ không bị ảnh hưởng bởi thực tế là thông tin đầu ra được ghi vào tệp. Đây là một ví dụ đơn giản:
Giả sử chúng ta có một tập lệnh shell được gọi là myscript.sh mà chúng ta muốn chạy trong nền và lưu thông tin đầu ra vào tệp output.log, chúng ta có thể sử dụng lệnh sau:
''Ầm ầm
nohup./myscript.sh>output.log2>&1&
```
Giải thích:
- './myscript.sh': là đường dẫn đến kịch bản cần thực thi. Nếu tập lệnh nằm trong thư mục hiện tại, bạn có thể sử dụng tên tập lệnh. Nếu không, đường dẫn đầy đủ cần phải được cung cấp. Hãy chú ý đến các quyền thực thi (ví dụ: chmod+xmyscript.sh) sử dụng tập lệnh.
- 'nohup': yêu cầu hệ thống chạy lệnh này trong nền và bỏ qua tín hiệu gác máy. Điều này đảm bảo rằng tập lệnh sẽ vẫn chạy ngay cả khi bạn thoát khỏi thiết bị đầu cuối hoặc ngắt kết nối khỏi SSH.
- '>': Biểu tượng chuyển hướng được sử dụng để chuyển hướng đầu ra tiêu chuẩn đến tệp được chỉ định (output.log trong trường hợp này). Nếu tệp không tồn tại, tệp sẽ được tạo tự động. Nếu tệp đã tồn tại, đầu ra mới được nối vào cuối tệp. Nếu bạn muốn ghi đè lên nội dung gốc thay vì thêm nó, bạn có thể sử dụng '>' theo sau là khoảng trắng trước tên tệp và ký hiệu đường ống (ví dụ: '>output.log'). Tuy nhiên, xin lưu ý rằng làm như vậy sẽ xóa nội dung tệp gốc. Do đó, cần kiểm tra thận trọng khi sử dụng. Hãy cẩn thận để đảm bảo rằng người dùng có quyền ghi vào tệp. Nếu bạn không chỉ định tệp đầu ra chuyển hướng, lệnh nohup sẽ lưu thông tin đầu ra trong tệp mặc định nohup.out. Tệp mặc định này được tạo trong thư mục chính của người dùng. Nhưng nếu đã có một tệp nohup.out có cùng tên, nó cũng sẽ bị ghi đè! Vì vậy, hãy cẩn thận với điều đó! Chúng tôi sử dụng '2>&1' sau đó để đảm bảo rằng đầu ra lỗi std cũng được chuyển hướng đến cùng một tệp. Nếu không, đầu ra lỗi tiêu chuẩn sẽ được ghi vào một tệp có tên nohup.err trong thư mục hiện tại theo mặc định (nếu nó tồn tại). Điều này cho phép chúng tôi xem tất cả thông tin đầu ra trong cùng một tệp! Cả thông báo đầu ra và thông báo lỗi bình thường đều được ghi lại! Ngoài ra, chúng ta có thể thêm dấu "&" vào cuối dòng lệnh để lệnh chạy trong nền mà không chặn phiên đầu cuối hiện tại. Điều này rất tiện dụng trong sử dụng thực tế! Vì vậy, nếu bạn muốn làm việc trên nhiều tác vụ cùng một lúc hoặc có một tác vụ chạy độc lập với hoạt động nền trước, hãy chắc chắn sử dụng "&"! Nó sẽ cải thiện đáng kể năng suất và trải nghiệm sự thoải mái của chúng tôi! Về đường dẫn tạo tệp, bạn có thể cá nhân hóa nó trong thiết bị đầu cuối ~ Ví dụ: bạn có thể trực tiếp thay đổi hoặc thay đổi cài đặt biến môi trường của hệ thống trong tệp hệ thống, bạn có thể đạt được hiệu quả như vậy! Đây cũng là một lời nhắc nhở để nhớ kiểm tra xem các quyền và cài đặt nhật ký có đáp ứng các yêu cầu sau khi sử dụng tập lệnh hay không! Cài đặt không chính xác có thể dẫn đến mất dữ liệu hoặc các vấn đề bảo mật. Vì vậy, an toàn là trên hết! Hy vọng bài viết này sẽ giúp các bạn hiểu rõ hơn và sử dụng chức năng output redirect của lệnh nohup và shell script các bạn nhé! Hãy cùng nhau làm cho việc lập trình hiệu quả hơn!