Làm cách nào để tạo lại các lệnh chạy trên một máy trên một máy khác?


8

Tôi muốn cài đặt một số phần mềm trên máy linux mà tôi đã chạy trong VirtualBox. Sau đó, tôi muốn làm điều tương tự trên linux-VPS.

Tôi nghĩ rằng tôi có thể lưu tất cả các lệnh mà tôi chạy bằng cách sử dụng historylệnh. Có cách nào tôi có thể chạy các lệnh này trên máy khác không? Hoặc cách để làm những việc như vậy là gì?

Câu trả lời:


5

Chà, tôi tưởng tượng 2 tình huống ở đây:

  1. Nếu tôi cần chạy một số lượng nhỏ các lệnh, tôi sẽ chỉ chạy lại chúng trên bất kỳ máy nào khác (theo số lượng nhỏ tôi có nghĩa là ít hơn 10)

  2. Nếu tôi cần chạy nhiều lệnh, tôi sẽ đặt chúng vào tập lệnh bash và chạy tập lệnh trên tất cả các máy khác. Kịch bản sẽ trông như thế này:

    #!/bin/bash
    command 1
    command 2
    command 3
    command 4

Nếu bạn không chắc chắn về kết quả của một số lệnh, bạn có thể tách các lệnh bằng cách &&, nghĩa là lệnh tiếp theo sẽ chỉ thực hiện nếu lệnh trước đó thành công. command1 && command2có nghĩa là lệnh2 sẽ không được thực thi nếu lệnh1 thất bại.


Cảm ơn cho một câu trả lời tuyệt vời. Tôi sẽ thiết lập PHP + Nginx + PostgreSQL để tôi đoán giải pháp kịch bản là con đường để đi.
Jonas

Phụ thuộc vào mức độ bạn đã biết cách thực hiện và số lần bạn dự định sao chép quy trình này. (Mặc dù nó không tự động, cách tiếp cận kỹ lưỡng nhất cho một hoặc hai lần có lẽ là giữ một tài liệu lớn bao gồm các đoạn mã làm việc và suy nghĩ và ghi chú về quy trình thiết lập mà bạn có thể tham khảo sau ...) biết mọi thứ hoạt động như thế nào, thì bạn chắc chắn nên viết một kịch bản Bash hoặc Puppet lớn hoặc bất cứ điều gì.
Kevin Cantu

5

Có một số công cụ hiện có cho phép bạn đăng nhập và thực hiện hàng loạt lệnh trên nhiều máy cùng một lúc. Đây là một cặp vợ chồng:


3

Patkos đã đúng, có lẽ tốt nhất là tạo ra một kịch bản. Tuy nhiên, đối với điều này, đôi khi bạn phải thử nghiệm xung quanh cho đến khi bạn hiểu đúng và cần một số nhật ký về những gì bạn đã làm và kết quả là gì. Ở đây các công cụ scriptcó ích.

Nó tạo ra một bản ghi của tất cả các hoạt động trong thiết bị đầu cuối mà nó đang chạy:

Script tạo một bản thảo của mọi thứ được in trên thiết bị đầu cuối của bạn. Nó rất hữu ích cho những sinh viên cần một bản ghi cứng của phiên tương tác làm bằng chứng của bài tập, vì tệp bản thảo có thể được in ra sau đó với lpr (1).


Cảm ơn, tôi sẽ tìm hiểu thêm về điều đó. Trông nó thật thú vị.
Jonas

làm thế nào về việc thực hiện mọi thứ trên một máy, sau đó kiểm tra tệp lịch sử (chẳng hạn như ~ / .bash_history cho bash, hoặc ~ / .histfile cho zsh) và có thể sao chép một số?
phunehehe

Lịch sử có thể được rút ngắn trong 100 lệnh cuối cùng hoặc một số giới hạn kích thước tùy ý khác, vì vậy bạn phải kiểm tra xem.
Kevin Cantu


2

Tôi đã xây dựng một công cụ nguồn mở có tên là Overcast để làm cho việc này trở nên dễ dàng hơn.

Bạn có thể quay các máy Virtualbox cục bộ (sử dụng Vagrant dưới mui xe) hoặc trên một loạt các nhà cung cấp đám mây khác nhau, sau đó chạy bất kỳ lệnh hoặc tệp tập lệnh nào trên tất cả chúng:

# Spin up Ubuntu 14.04 instances on Virtualbox, DigitalOcean, and Linode:
overcast virtualbox create vm.01
overcast digitalocean create vm.02
overcast linode create vm.03
# Run an arbitrary sequence of commands and scripts across all of them:
overcast run vm.* uptime "free -m" ./path/to/my-script.sh

Tài liệu tốt đẹp!

1

Nếu trước tiên bạn muốn chạy các lệnh tương tác trên một máy và sau đó có tập lệnh để chạy chúng trên các máy khác, chỉ cần mở .bash_history (hoặc bất cứ thứ gì shell của bạn sử dụng) trong trình soạn thảo văn bản và xóa bất kỳ lỗi nào bạn đã mắc lần đầu xung quanh. Voila! Bạn đã có một tập lệnh mà bạn có thể sao chép sang các máy khác (với scp, rsync, bất cứ điều gì).

Trong một số trường hợp, bạn có thể phải xử lý tệp hơi trước. Chẳng hạn, tôi sử dụng zsh và được cấu hình để thêm các siêu dữ liệu khác nhau (dấu thời gian). Rõ ràng là bạn cần phải loại bỏ điều này. Bạn có thể dễ dàng làm điều này trong vim hoặc TextMate, hoặc có thể là bất kỳ trình soạn thảo phong nha nào bằng cách sử dụng lựa chọn khối. Hoặc bạn có thể sử dụng awk hoặc cắt để xuất mọi thứ trừ siêu dữ liệu. Đây là một cách để làm điều này:

cat .zhistory | cut -d';' -f2- 

Nhưng hầu hết thời gian bạn sẽ thấy tệp lịch sử của mình chỉ là một danh sách các lệnh, vì vậy bạn có thể không cần phải lo lắng về bất kỳ thao tác xoa bóp này.

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.