¿Cómo puedo reproducir los comandos que se ejecutan en una máquina en otra máquina?

8

Me gustaría instalar algún software en una máquina Linux que he ejecutado en VirtualBox. Entonces me gustaría hacer lo mismo en un linux-VPS.

Creo que puedo guardar todos los comandos que ejecuto usando el historycomando. ¿Hay alguna forma de que pueda ejecutar estos comandos en otra máquina? ¿O cuál es la forma de hacer tales cosas?

Jonas
fuente

Respuestas:

5

Bueno, me imagino 2 situaciones aquí:

  1. Si necesito ejecutar una pequeña cantidad de comandos, simplemente los volvería a ejecutar en cualquier otra máquina (por pequeña cantidad quiero decir menos de 10)

  2. Si necesito ejecutar muchos comandos, los pondría en un script bash y ejecutaría el script en todas las otras máquinas. El script debería verse así:

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

Si no está seguro sobre el resultado de algunos comandos, puede separar los comandos por &&, lo que significa que el siguiente comando se ejecutará solo si el anterior fue exitoso. command1 && command2significa que el comando2 no se ejecutará si el comando1 falla.

Patkos Csaba
fuente
Gracias por una gran respuesta. Configuraré PHP + Nginx + PostgreSQL, así que supongo que la solución de script es el camino a seguir.
Jonas
Depende de cuánto ya sabe hacer y cuántas veces planea duplicar este proceso. (Aunque no está automatizado, el enfoque más completo para una o dos veces es mantener un documento grande que incluya fragmentos de código de trabajo y pensamientos y notas sobre el procedimiento de configuración que puede consultar más adelante ...) Una vez que sepa cómo funciona todo, entonces definitivamente debe escribir un gran script de Bash o Puppet o lo que sea.
Kevin Cantu
5

Existen varias herramientas que le permiten iniciar sesión y ejecutar series de comandos en varias máquinas al mismo tiempo. Aquí hay una pareja:

Caleb
fuente
3

Patkos tiene razón, probablemente sea mejor crear un script. Sin embargo, para esto, a veces tienes que experimentar hasta que lo hagas bien y necesites un registro de lo que hiciste y cuál fue el resultado. Aquí la herramienta scriptes útil.

Crea un registro de toda la actividad en el terminal en el que se está ejecutando:

Script hace un mecanografiado de todo lo impreso en su terminal. Es útil para los estudiantes que necesitan un registro impreso de una sesión interactiva como prueba de una tarea, ya que el archivo mecanografiado se puede imprimir más tarde con lpr (1).

fschmitt
fuente
Gracias, aprenderé más sobre eso. Se ve interesante.
Jonas
¿Qué tal hacer todo en una máquina, luego verificar el archivo de historial (como ~ / .bash_history para bash, o ~ / .histfile para zsh) y tal vez copiar algo más?
phunehehe
El historial probablemente esté truncado a los últimos 100 comandos o algún otro límite de tamaño arbitrario, por lo que tendrá que verificar eso.
Kevin Cantu
2

Creé una herramienta de código abierto llamada Overcast para facilitar este tipo de cosas.

Puede activar máquinas Virtualbox localmente (usa Vagrant bajo el capó) o en un grupo de diferentes proveedores de la nube, y luego ejecutar cualquier comando o archivo de script en todos ellos:

# 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
Andrew Childs
fuente
Buena documentación!
1

Si desea ejecutar primero los comandos de forma interactiva en una máquina y luego tener un script para ejecutarlos en otras, simplemente abra su .bash_history (o lo que sea que use su shell) en un editor de texto y elimine los errores que cometió la primera vez alrededor. Voila! Tienes un script que puedes copiar en las otras máquinas (con scp, rsync, lo que sea).

En algunos casos, es posible que primero deba procesar el archivo ligeramente. Por ejemplo, uso zsh, y lo configuré para agregar varios metadatos (sellos de fecha). Obviamente, deberías eliminar esto. Puede hacerlo fácilmente en vim o TextMate, o probablemente en cualquier editor decente que use la selección de bloque. O puede usar awk o cut para generar todo menos los metadatos. Aquí hay una forma de hacer esto:

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

Pero la mayoría de las veces encontrará que su archivo de historial es solo una lista directa de comandos, por lo que probablemente no tendrá que preocuparse por nada de este masaje.

iconoclasta
fuente