Sau khi cố gắng tìm ra lý do tại sao nhiệm vụ Capistrano (cố gắng khởi động một daemon ở chế độ nền) bị treo, tôi phát hiện rằng sử dụng &&
trong bash over ssh ngăn chương trình tiếp theo chạy trong lý lịch. Tôi đã thử nó trên bash 4.1.5 và 4.2.20.bash && nhà điều hành ngăn chặn backgrounding trên ssh
Sau đây sẽ treo (tức là chờ sleep
để kết thúc) trong bash:
ssh localhost "cd /tmp && nohup sleep 10 >/dev/null 2>&1 &"
Sau đây sẽ không:
ssh localhost "cd /tmp ; nohup sleep 10 >/dev/null 2>&1 &"
Cả sẽ này:
cd /tmp && nohup sleep 10 >/dev/null 2>&1 &
Cả zsh và dấu gạch ngang sẽ thực thi nó trong nền trong mọi trường hợp, bất kể &&
và ssh. Đây có phải là hành vi bình thường/mong đợi đối với bash hoặc lỗi không?
tôi không chính xác biết câu trả lời cho câu hỏi của bạn, nhưng sẽ nói rằng đôi khi tôi gặp phải những kích thích tương tự khi sử dụng SSH, với Bash trên đầu từ xa. Tôi không biết liệu vấn đề có phải là đặc thù của Bash hay không, nhưng đôi khi tôi có may mắn hơn bằng cách sử dụng nội trang 'disown' của Bash shell chứ không phải lệnh' nohup'. Nếu điều này làm bạn quan tâm, hãy gõ 'help disown | ít hơn trong khi chạy Bash. Và nếu bạn tình cờ tìm hiểu một giải pháp chung, hãy đăng nó ở đây. Tôi nên quan tâm để đọc. – thb
Tôi thực sự đã cố gắng mucking về với sự kết hợp khác nhau của 'disown',' nohup' và chuyển hướng, không có kết quả. Các '&&' luôn luôn bị cấm nền. Tôi có thể lấy đi bằng cách gói hai lệnh trong một vỏ bọc, nhưng điều đó không thực sự giống nhau. – Hinrik
Lệnh này có vẻ phù hợp với tôi. Bạn có ý gì khi bị treo cổ? Liệu 'cd' mất một thời gian dài? Nó có thể là một vấn đề với máy chủ từ xa, ví dụ: quá tải. – suvayu