Computer >> Máy Tính >  >> Điện thoại thông minh >> Linux

Cách chạy các quy trình trong nền bằng nohup trong Linux

Hướng dẫn này sẽ chỉ cho bạn cách sử dụng lệnh ‘nohup’ để chạy các quy trình trong nền, để chúng tiếp tục chạy ngay cả khi bạn đăng xuất hoặc bị ngắt kết nối.

Tôi làm việc trên các máy chủ từ xa rất nhiều. Tôi sử dụng SSH để kết nối với máy chủ của mình. Khá thường xuyên, tôi chạy một quy trình mà tôi cần để chạy ngay cả sau khi tôi đóng kết nối SSH của mình. Đây có thể là một tập lệnh shell phân tích cú pháp qua các tệp nhật ký của tôi hoặc khôi phục cơ sở dữ liệu mysql rất lớn. Đó là khi tôi chuyển sang tiện ích dòng lệnh Linux có tên “nohup”. “Nohup” là viết tắt của “no Hangup”, có nghĩa là “bỏ qua tín hiệu gác máy”. Tín hiệu "gác máy" là những gì xảy ra khi bạn đăng xuất. Những gì “nohup” làm là nó cho phép bạn đăng nhập vào máy chủ của mình, khởi chạy một quy trình và đăng xuất. Quá trình tiếp tục chạy ngay cả sau khi bạn đã đăng xuất. Khi đăng nhập lại, bạn có thể truy cập lại quá trình đó, miễn là nó vẫn đang chạy.

Cú pháp cơ bản của "nohup" là:

# nohup [command] &

Thay thế “[command]” bằng tên của tập lệnh shell của bạn hoặc một lệnh. Dấu “&” ở cuối làm cho lệnh hoặc tập lệnh chạy như một quy trình nền. Dưới đây là ví dụ về cách bạn sử dụng “nohup” để sao lưu cơ sở dữ liệu mysql lớn trên máy chủ từ xa của mình. Đầu tiên, tôi đăng nhập vào máy chủ từ xa của mình bằng SSH:

# ssh calvin@sevenacross.com

Sau đó, tôi thực hiện lệnh “mysqldump -ucalvin -phobbes largedatabase> largedatabase.db” ở chế độ “nohup” bằng cách thêm “nohup” trước và “&” sau lệnh:

# nohup mysqldump -ucalvin -phobbes largedatabase> largedatabase.db &
[1] 3999
# nohup:thêm đầu ra vào `nohup.out '

Có hai dòng đầu ra mà bạn nhận được. “3999” trong dòng đầu tiên là ID quy trình của quy trình mà tôi vừa tạo ra, trong khi “nohup:thêm đầu ra vào` nohup.out '”có nghĩa là đầu ra thường đến với thiết bị đầu cuối đang được chuyển tiếp vào một tệp có tên “nohup.out” trong thư mục mà bạn đã khởi chạy lệnh từ đó. Bạn có thể kiểm tra xem quy trình có còn đang chạy hay không bằng cách tìm kiếm trong tất cả các quy trình đang chạy bằng cách sử dụng ID quy trình:

# ps -ef | grep 3999
calvin 3999 29848 0 18:42? 00:00:00 / usr / bin / mysqldump
calvin 6575 31852 0 18:44 pts / 2 00:00:00 grep 3999

Khi quá trình chạy xong, bạn sẽ thấy một đầu ra trong dòng lệnh như sau:

[1] + Xong nohup mysqldump -ucalvin -phobbes largedatabase> largedatabase.db

Bạn có thể kiểm tra tệp “nohup.out” để kiểm tra bất kỳ lỗi nào hoặc các thông báo khác được xuất ra trong khi quá trình đang chạy. Nếu tệp vẫn trống thì không sao. Điều đó có nghĩa là không có thông báo nào được xuất ra khi quá trình đang chạy.

Bây giờ bạn đã biết cách chạy các quy trình trong nền, tại sao không tìm hiểu một số mẹo và thủ thuật Linux khác?