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?
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?
Để 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.
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ự).
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)
.
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
Cảm ơn bạn. Bạn đã lưu ngày của tôi cho tùy chọn '-f' thành ssh. –
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
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