Làm cách nào để chạy tập lệnh qua SSH mà không kết thúc khi tôi đóng kết nối?


18

Tôi cần chạy script, mất nhiều thời gian để thực thi hoặc tôi chỉ muốn nó chạy mãi mãi. Tôi không thể SSH vào máy của mình, vì khi tôi ngắt kết nối, nó sẽ ngừng chạy.

Có cách nào để chạy tập lệnh không phụ thuộc vào trình bao khởi động nó không?

Tôi đang sử dụng Ubuntu 9.04.

Câu trả lời:


24

Bạn có thể chạy lệnh bằng lệnh nohup trước nó. Bạn cũng có thể chạy nó trong 'màn hình', điều này sẽ cho phép bạn gắn lại thiết bị đầu cuối.

Ví dụ:

ssh mySever 'nohup bash myscript.sh'

Hoặc chỉ cần ssh vào và chạy lệnh nohup. Nó sẽ tiếp tục chạy ngay cả khi bạn ngắt kết nối. Điều này là do nohup sẽ chặn đơn SIGHUP (hangup).

Màn hình có liên quan nhiều hơn một chút, nhưng trong 20 phút có thể bạn sẽ phải học những điều cơ bản, nó là một trong những công cụ hữu ích nhất hiện có. Đây là một hướng dẫn .


Bị bắn tỉa bởi Kyle ...> cười <
Evan Anderson

+1 cho bất cứ ai bắn tỉa Evan. Chúc mừng 10K :)
squillman

1
liên kết đến hướng dẫn bị hỏng :(
Ido Ran

7

Tôi luôn luôn sử dụng nohup. Nếu tôi quan tâm đến đầu ra, tôi chuyển hướng nó đến một tệp nhật ký, nếu không tôi sẽ gửi nó đến / dev / null.

Thí dụ:

nohup scp file.tar.gz root@someserver:/var/tmp > /dev/null 2>&1 &

Điều đó đặt nó ở chế độ nền, với đầu ra sẽ là / dev / null và nó miễn nhiễm với tín hiệu HUP nếu bạn đăng xuất. Bạn cũng có thể "từ chối" công việc với một số shell nhất định (như bash) để nó không được kết nối với phiên của bạn.

disown %1

1
+1 cho từ chối - rất hữu ích khi bạn quên chạy bằng cách sử dụng nohup
Đánh dấu

5

Để cài đặt màn hình: apt-get install screen

Sau đó khởi chạy bằng cách sử dụng đơn giản: screen

man screenđể có được các ràng buộc quan trọng.


+1! Màn hình là da điều!
Javier

Tôi đã từng sử dụng màn hình, nhưng đã chuyển sang tmux vì nhiều lý do. Google "tmux vs screen" và bạn sẽ tìm thấy một số liên kết như thế này: superuser.com/questions/236158/tmux-vs-screen
m0j0

2

Trong khi bạn đăng nhập vào máy chủ, bạn có thể chạy tập lệnh ở chế độ tách rời bằng lệnh sau:

nohup script >script.out 2>script.err &

Sau này khi bạn đăng nhập lại, bạn có thể kiểm tra script.out cho bất kỳ đầu ra nào và script.err cho bất kỳ thông báo lỗi nào. Nếu bạn muốn thông báo đầu ra và thông báo lỗi trong cùng một tệp, thì hãy làm:

nohup script >script.out 2>&1 &
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.