2012-02-11 29 views
16

Tôi đang cố bắt đầu một máy chủ thử nghiệm qua ssh nhưng nó luôn chết khi tôi ngắt kết nối khỏi ssh.Chạy một quy trình liên tục qua ssh

Có cách nào để bắt đầu quy trình (chạy máy chủ) để nó không chết khi kết thúc phiên ssh của tôi không?

Trả lời

17

Để thay thế cho nohup, bạn có thể chạy ứng dụng từ xa bên trong bộ ghép kênh đầu cuối, chẳng hạn như GNU screen hoặc tmux.

Sử dụng các công cụ này giúp dễ dàng kết nối lại với phiên từ máy chủ khác, có nghĩa là bạn có thể khởi động hoặc tải xuống lâu trước khi bạn rời nơi làm việc và kiểm tra trạng thái của nó khi bạn về nhà. Ví dụ. Tôi thấy điều này đặc biệt hữu ích khi thực hiện công việc phát triển trên máy chủ rất xa (ở một quốc gia khác) với kết nối không đáng tin cậy giữa tôi và họ, nếu kết nối bị ngắt, tôi có thể chỉ cần kết nối lại và tiếp tục mà không mất bất kỳ trạng thái nào.

+1

Ví dụ: Sử dụng ssh và màn hình để tạo Các phiên Terminal cuối cùng có thể truy cập được từ hầu hết mọi nơi http://bit.ly/1ewxKKv – Jon

4

Có; bạn có thể sử dụng the nohup command để nuốt tín hiệu HUP ("gác máy") được gửi đến chương trình của bạn khi bạn gác phiên SSH của mình. Ngoài ra, nếu bạn đang tự viết máy chủ, bạn có thể mã nó vào register a handler cho tín hiệu HUP và nuốt nó bên trong chương trình (thay vì sử dụng chương trình nohup bên ngoài thực hiện tương tự).

3

Thay thế cho nohup, screen, et al. bạn có thể sửa đổi máy chủ của mình để gọi daemon để tách máy chủ khỏi thiết bị đầu cuối. Đây là cách thành ngữ để viết các dịch vụ cho Linux.

Xem thêm daemon(3).

4

Ngoài các trả lời khác, bạn có thể khởi động máy chủ thử nghiệm của bạn qua batch (hoặc at) nhưng như Brian answered bạn nên gọi daemon

Và bạn có thể vượt qua các tùy chọn -f-ssh

+3

Cảm ơn bạn. Bạn đã lưu ngày của tôi cho tùy chọn '-f' thành ssh. –

3

Nếu bạn' đang chuyển tiếp sang một bản phân phối Linux có systemd, bạn có thể sử dụng systemd-run để khởi chạy một quá trình trong nền (theo các thuật ngữ của systemd, "một dịch vụ tạm thời"). Ví dụ, giả sử bạn muốn ping một cái gì đó trong nền:

systemd-run --unit=pinger ping 10.8.178.3 

Lợi ích bạn sẽ nhận được với systemd trên chỉ chạy một quá trình với nohup được systemd mà sẽ theo dõi quá trình này và nó là trẻ em, giữ các bản ghi, hãy nhớ mã thoát và cho phép bạn giết sạch quá trình và tất cả là con của nó. Ví dụ:

Xem tình trạng và các dòng cuối cùng của đầu ra:

systemctl status pinger 

Luồng đầu ra:

journalctl -xfu pinger 

Kill:

systemctl kill pinger 
Các vấn đề liên quan