Các lệnh nohup và disown trong các tập lệnh shell được giải thích chi tiết
2024-10-29 14:33:52
tin tức
tiyusaishi
I. Giới thiệu
Trong các hệ điều hành Unix / Linux, người ta thường gặp các kịch bản trong đó các tập lệnh được thực thi trong nền và đưa ra khỏi tầm kiểm soát của phiên đầu cuối. Điều này liên quan đến hai lệnh shell thường được sử dụng: nohup và disown. Bài viết này sẽ trình bày chi tiết cách sử dụng hai lệnh này và ứng dụng của chúng trong các tập lệnh shell.
2. Lệnh Nohup
1. Khái niệm cơ bản: Lệnh nohup được sử dụng để chạy lệnh hoặc tập lệnh và bỏ qua tất cả các tín hiệu gác máy. Điều này có nghĩa là ngay cả khi phiên đầu cuối bị đóng, lệnh hoặc tập lệnh sẽ tiếp tục chạy trong nền.
2. Ví dụ sử dụng: Giả sử chúng ta có một tập lệnh shell được gọi là myscript.sh có thể chạy trong nền bằng lệnh sau:
''Ầm ầm
nohup./myscript.sh&
```
Biểu tượng "&" cho biết việc đặt tập lệnh vào nền để chạy. Sau khi bạn chạy lệnh này, tập lệnh chạy liên tục, ngay cả khi phiên đầu cuối được đóng.
3. Từ chối lệnh
1. Khái niệm cơ bản: Lệnh disown được sử dụng để xóa quy trình được chỉ định khỏi danh sách các quy trình của shell hiện tại, để nó không còn thuộc về tiến trình con của shell. Bằng cách này, ngay cả khi phiên đầu cuối bị đóng, quá trình sẽ không bị chấm dứt bằng cách gửi tín hiệu gác máy.
2. Lưu ý sử dụng: Chúng ta có thể sử dụng cú pháp sau để xóa một quy trình:
''Ầm ầm
từ chối[tùy chọn] ID quy trình
```
Thường được sử dụng với tùy chọn -h, điều đó có nghĩa là không có tín hiệu SIGHUP nào được gửi đến quy trình. Sử dụng từ chối trong tập lệnh đảm bảo rằng tập lệnh không bị chấm dứt do tắt phiên đầu cuối trong khi chạy nền.
4. Sử dụng nohup và disown cùng nhau trong shell script
Trong thực tế, chúng tôi thường sử dụng kết hợp nohup và disown để đảm bảo rằng kịch bản chạy ổn định trong nền. Đây là một ví dụ đơn giản:
1. Tạo một tập lệnh shell gọi là myscript.sh và thêm như sau:
''Ầm ầm
!/bin/bash
Chạy một tác vụ dài, chẳng hạn như lặp lại thời gian hiện tại
trong khi; làm
echo "Thời gian hiện tại: $ (ngày)" >>mylog.log nối nhật ký vào tệp mylog.log
sleep1 xuất ra thời gian một lần nữa sau khi ngủ một giây
Thực hiện
```
Lưu và cấp quyền thực thi.
2. Chạy tập lệnh trong thiết bị đầu cuối bằng lệnh sau và đảm bảo nó chạy trong nền và không bị ảnh hưởng bởi việc đóng phiên đầu cuối:
''Ầm ầm
nohup./myscript.sh& chạy script với nohup và thực thi nó ở chế độ nền;
Sử dụng lệnh disown để loại bỏ quá trình khỏi điều khiển phiên đầu cuối
Bây giờ, ngay cả khi phiên đầu cuối bị đóng, các tập lệnh myscript.sh vẫn tiếp tục chạy trong nền và nối nhật ký vào các tệp mylog.log. Đây là ứng dụng điển hình của nohup và từ chối các lệnh trong tập lệnh shell. Chúng rất hữu ích để tự động hóa các tác vụ và quản lý tác vụ nền. Trong thực tế, chúng ta cũng có thể kết hợp các lệnh và thủ thuật shell khác để tối ưu hóa và quản lý các tác vụ nền. Hy vọng bài viết này có thể hữu ích với bạn!