Linux - Chạy cùng một lệnh trên nhiều máy cùng một lúc


39

Tôi có khoảng một tá hộp Linux mà thỉnh thoảng tôi cần chạy cùng một lệnh. Có cách nào dễ dàng hơn (hoặc cách tự động) để thực hiện việc này ngoài việc đăng nhập vào từng máy và chạy lệnh một lần không? Nó không phải là cùng một lệnh mọi lúc và nó không ở thời điểm định sẵn nên nó không phải là thứ lý tưởng cho các công cụ như cron.



Cuối cùng là danh sách chính tắc :)
rogerdpack

Câu trả lời:


12

Hừm, có lẽ pconsole là công cụ bạn muốn.


Wow, pconsole trông khá tuyệt! Tôi đã cài đặt nó không có vấn đề và nó có vẻ là tuyệt vời cho đến nay. Cảm ơn!
Chris Bunch

Đây cũng là một trong những công cụ yêu thích của tôi. :) np
Nút


8

Bạn nên xem Puppet ở đây là một bài viết linux.com về thiết lập và sử dụng


1
Hmm, Puppet trông khá thú vị. Tôi sẽ xem qua nếu pconsole bắt đầu làm tôi thất vọng, vì tôi đã chạy nó và nó dễ hơn học ngôn ngữ của Puppet. Nhờ đề nghị mặc dù!
Chris Bunch

Cụ thể, công cụ Marionette Collective (còn được gọi là mcollective, hoặc mco). Đó là một phần của con rối cho phép bạn làm mọi việc trên một nhóm máy chủ, dựa trên sự kiện con rối.
Brian Minton


8

Bạn có thể thử Capistrano . Ban đầu nó là một công cụ triển khai Rails, nhưng nó đã phát triển để làm nhiều việc với các máy từ xa.

Để có một bản hoàn chỉnh hơn để quản trị nhiều máy, bạn có thể muốn dùng thử Chef .



6

Tôi đoán tôi sẽ sao chép và dán câu trả lời của mình từ Stack Overflow , thứ mà mọi người có vẻ thích. . .


Vấn đề về cách chạy lệnh trên nhiều máy chủ cùng một lúc xuất hiện trong danh sách gửi thư Perl vào ngày khác và tôi sẽ đưa ra cùng một khuyến nghị mà tôi đã đưa ra ở đó , đó là sử dụng gsh: http://outflux.net/unix/ phần mềm / gsh

gsh tương tự như for box in box1_name box2_name box3_namegiải pháp "" đã được đưa ra nhưng tôi thấy gsh sẽ thuận tiện hơn. Bạn thiết lập tệp / etc / ghosts chứa các máy chủ của bạn trong các nhóm như web, db, RHEL4, x86_64 hoặc bất cứ thứ gì (man ghost) sau đó bạn sử dụng nhóm đó khi bạn gọi gsh.

[pdurbin@beamish ~]$ gsh web "cat /etc/redhat-release; uname -r"
www-2.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-2.foo.com: 2.6.9-78.0.1.ELsmp
www-3.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-3.foo.com: 2.6.9-78.0.1.ELsmp
www-4.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-4.foo.com: 2.6.18-92.1.13.el5
www-5.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-5.foo.com: 2.6.18-92.1.13.el5
[pdurbin@beamish ~]$

Bạn cũng có thể kết hợp hoặc phân chia các nhóm ma, sử dụng web + db hoặc web-RHEL4, ví dụ.

Tôi cũng sẽ đề cập rằng trong khi tôi chưa bao giờ sử dụng shmux, trang web của nó chứa danh sách các phần mềm (bao gồm cả gsh) cho phép bạn chạy các lệnh trên nhiều máy chủ cùng một lúc. Capistrano đã được đề cập và (từ những gì tôi hiểu) cũng có thể nằm trong danh sách đó.


5

Nếu bạn đang ở trên máy tính để bàn KDE, konsole có tùy chọn "Gửi đầu vào cho tất cả các phiên". Nó áp dụng cho tất cả các phiên được mở trong cùng một cửa sổ konsole.


5

Bạn cũng có thể thử ssh [user@]hostname [command]và sau đó lặp qua tên máy chủ.


2
Điều này không thực sự thỏa mãn phần "cùng một lúc" (nó được nối tiếp, không song song), nhưng dường như đó không phải là một yêu cầu từ cơ thể của câu hỏi, đây cũng có thể là một giải pháp hợp lý.
voretaq7

4

Cũng hãy xem func. Func cho phép bạn sử dụng kiến ​​trúc mô-đun để kiểm soát các khía cạnh khác nhau của hệ thống, từ xử lý các gói, đến chạy lệnh, v.v. Nó hoạt động trên mô-đun máy khách / máy chủ qua SSL và cũng có sơ đồ xác thực khá linh hoạt.


Cùng với đó, Func đang được Red Hat xây dựng và có khả năng sẽ thấy việc sử dụng mở rộng trong các sản phẩm Fedora / RHEL trong tương lai. Đây chắc chắn là một thứ đáng để xem, vì tôi hy vọng nó sẽ trở thành giải pháp tiêu chuẩn thực tế cho loại vấn đề này.
Christopher Cashell

4

Tôi đã sử dụng ClusterSSH và nó hoạt động. Tuy nhiên, ngoài một số thiết bị đầu cuối nhất định, nó không có quy mô tốt.

Tôi ngạc nhiên không ai có xargs. Xargs là hoàn hảo cho hầu hết mọi thứ. Trên thực tế, tôi đã trở nên thoải mái với nó đến mức tôi không bao giờ sử dụng cụm sao nữa.

Thí dụ

echo -n host1 host2 host3 host4|xargs -d" " -n1 -P30 -I+ ssh + "sudo service apache2 restart"

(Khởi động lại apache trên tất cả các máy chủ web.)


đối với những người theo dõi, -P30phần này có nghĩa là "chạy song song 30 người trong số họ"
rogerdpack

4

Nếu bạn đã là người dùng tmux, bạn có thể thưởng thức tmux-cssh (viết tắt của TMUX-C(luster)-SSH). Bạn cung cấp cho nó một danh sách các tên máy chủ và nó sẽ mở một cửa sổ tmux mới với phiên SSH mở cho mỗi máy chủ trong khung riêng của nó. Tất cả các tổ hợp phím được sao chép vào mỗi cửa sổ. Tùy thuộc vào số lượng máy chủ mà đầu ra có thể khó đọc.


1
Một liên kết lót không nhất thiết phải hữu ích. Hãy mô tả. Tại sao bạn lại giới thiệu công cụ này?
Deer Hunter

3

Các công cụ khác là:

RunDeck cũng có thể được mô tả là ControlTier nhẹ.

Những công cụ này không chỉ cung cấp cho bạn một cụm vỏ, mà còn là một giao diện web và bạn có thể lưu công việc của mình để sử dụng trong tương lai.


2

Bạn cũng có thể thử Cluster SSH (cssh). Tôi chưa sử dụng nó, nhưng có một bài viết trên LinuxJournal.com có ​​tên "Quản lý nhiều máy chủ hiệu quả" nói về nó.


1

Sử dụng món ăn , đơn giản và rất mạnh mẽ! Kịch bản này đã thay đổi cuộc đời tôi :) Một kịch bản để thống trị tất cả!

http://nic-nac-project.org/~drimiks/gnu/dish.shtml

Lớp vỏ siêng năng 'món ăn' thực thi các lệnh thông qua ssh / rsh / telnet / mysql đồng thời trên một số hệ thống. Thay đổi mật khẩu, cập nhật cấu hình, sao chép tệp, kiểm tra trạng thái, v.v. trên hàng trăm nút được thực hiện đơn giản. Dish tương tự như 'dsh' của IBM (shell phân tán) nhưng hơn nữa cho phép thực thi các lệnh yêu cầu xác thực từ xa. So với các gói nguồn mở khác bao gồm vỏ phân tán (hoặc các công cụ tương tự) như ClusterIt, vỏ của dancer, vỏ phân phối song song hoặc C3, món ăn là một trình bao bọc vỏ từ xa mỏng và dễ sử dụng cho các trường hợp cần một giải pháp linh hoạt. Bạn có thể duyệt trang hướng dẫn của món ăn trên mạng tại đây.


1

Dưới đây là một số ví dụ sử dụng các lệnh được đề cập trong các câu trả lời khác:

pdsh

Có thể lấy phạm vi số, đầu ra với tên máy chủ trước, dường như thực sự được duy trì :

phiên bản đơn giản nhất:

pdsh -w hostname echo done

đầu ra:

hostname: done

Ví dụ phức tạp hơn:

pdsh -w username@hostname[7-8],username@otherhost "sleep 5 && echo done"

đầu ra:

hostname8: done
hostname7: done
otherhost: done

mac: brew install pdsh

dsh

dsh -m user@host,user@host --remoteshell ssh --concurrent-shell -- "sleep 5 && echo done"

cần cài đặt shell từ xa nếu không nó sẽ sử dụng "rsh" có thể có hoặc thậm chí không khả dụng.

mac: brew install dsh

pssh

pssh -i -H user@host -H user@host "sleep 5 && echo done"

Tất cả đều có thể lấy danh sách các máy từ một tệp, tùy ý.

Vui lòng thêm nhiều ví dụ ở đây, đó là wiki cộng đồng

mac: brew install pssh

Cụm SSH

Cluster SSH ("phiên bản chỉ dành cho mac" rõ ràng có hai phiên bản còn lại ở đây ) thực sự mở "thiết bị đầu cuối thực sự" với một thiết bị đầu cuối lớn ở dưới đó gửi đầu vào cho tất cả các phiên bản khác. Vì vậy, nó giống như một giao diện người dùng gửi nó ra cho nhiều người.

Vd

csshX hostname0[1-2] hostname3 sau đó gõ vào ô màu đỏ và nó đi đến từng cửa sổ đầu cuối, mỗi cửa sổ sẽ bật lên.

mac: brew install csshx(phiên bản cũ nhưng vẫn hoạt động)

đó cũng là một brew install ansibleFWIW

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.