Tengo una máquina que ejecuta un par de máquinas virtuales vagabundos. El problema que tengo es que a veces me olvido de apagar esas máquinas virtuales antes de apagar o reiniciar mi máquina. Por eso mi máquina se atasca con este mensaje:waiting for vboxnet0 to become free
Busqué soluciones y encontré esta página:
http://en.kioskea.net/faq/3348-ubuntu-executing-a-script-at-startup-and-shutdown
Intenté lo que para el cierre, pero no funciona.
Escribí un archivo sh para ese comando:
#!/bin/bash
cd ~/workspace/git/mediaservice
vagrant halt
¿alguna sugerencia?
shutdown
reboot
execute-command
SERPRO
fuente
fuente
Respuestas:
Si sus máquinas virtuales vagabundos están usando VirtualBox, puede modificar / etc / default / virtualbox y cambiar la línea que dice:
SHUTDOWN_USERS=""
a
SHUTDOWN_USERS="all"
Eso me lo arregló en Ubuntu 14.04
fuente
SHUTDOWN_USERS=`cut -d: -f1 /etc/passwd`
lugar deSHUTDOWN_USERS="all"
/etc/default/virtualbox
archivo ...Para ejecutar un script al apagar o reiniciar:
sudo chmod +x K99_script
Notas:
fuente
fuente
Cómo hacerlo con Systemd (es más fácil)
Ahora que las variantes de Ubuntu y Mint se han movido a systemd, encontré que mis soluciones antiguas basadas en lo anterior son menos satisfactorias. Busqué en la web para averiguar cómo hacerlo con systemd y terminé combinando la sabiduría de otros y documentándolo como una publicación de blog en blogspot.com.au que contiene el siguiente tutorial.
Con systemd, crea uno o dos archivos para llamar a sus scripts utilizando las plantillas a continuación y ejecuta un par de comandos. Sencillo.
Versión GUI
Primero cree los scripts que desea ejecutar al inicio y / o apagado. Solo haz uno si no necesitas ambos. Creé .scopening_atstart y .scfullcopy_atend.
Luego, asegúrese de que ambos sean ejecutables haciendo clic con el botón derecho en el archivo, seleccionando propiedades y asegurándose de que, bajo permisos, haya marcado Permitir ejecutar el archivo como un programa.
Los dos archivos que creé se completan y guardan el contenido de un disco RAM. También crean un archivo en mi directorio de inicio para probar que el servicio está funcionando. Eran de la forma:
Luego abrí mi administrador de archivos como root, abrí
/etc/systemd/system
y creé un archivo startup.service y un archivo save-ramdisk.service. Obviamente, puede elegir sus propios nombres y los nombres genéricos podrían haber incluido un archivo de inicio llamado johns_start.service y un archivo de apagado llamado johns_shutdown.service. Simplemente no elija nombres de servicios existentes.y
Puede usar los mismos archivos de servicio, sustituyendo la ruta completa de su script ejecutable por la mía.
Finalmente, para cada uno, ejecute el comando systemctl enable your_files_name (pero sin el servicio de sufijo). Entonces mi primero fue
systemctl enable startup
Reinicie la computadora una vez para iniciar los servicios. El servicio de inicio se ejecutará siempre que systemd entre en el objetivo multiusuario y el servicio de detención cuando salga del objetivo multiusuario. Los archivos de servicio alternativos con diferentes condiciones de activación se describirán a continuación.
Los comandos adicionales útiles incluyen:
inicio
systemctl está habilitado inicio systemctl está activo inicio
systemctl reinicio inicio
Más se puede encontrar en la referencia anterior.
Versión CLI (línea de comando)
Esta descripción asume que usted opera desde su directorio personal en lugar de / home / john, usa sudo según sea necesario y su elección de editor donde escribo vim o svim.
Crea scripts de shell de inicio y apagado con la primera línea
#!/bin/sh
y hazlos ejecutables usandochmod +x my_new_filename
.Cree dos archivos como el anterior, o en este ejemplo, un archivo para manejar las tareas de inicio y apagado. Ejecutaré scripts en mi directorio de inicio, pero @don_crissti muestra algunas alternativas en Stack Exchange .
y copie en el contenido del archivo:
Luego habilite el servicio con el comando:
y reinicie su sistema después de lo cual los servicios estarán activos. Los comandos
systemctl is-enabled start_and_stop
ysystemctl is-active start_and_stop
se pueden utilizar para monitorear sus nuevos servicios.Cambio de las condiciones de activación para el apagado
Los archivos sobre todo usan la apertura o cierre del entorno multiusuario para iniciar la ejecución de los scripts. El siguiente archivo utiliza el comienzo de cuatro posibles procesos de apagado para iniciar sus scripts. Agregar o eliminar los objetivos en la línea Antes + la línea WantedBy le permitirá hacer distinciones más finas:
Este archivo fue propuesto en la segunda respuesta de esta publicación, pero no pude ejecutarlo hasta que agregué una sección de Instalación.
Nuevamente, edite el script
/etc/systemd/service/
y habilítelo usandosystemctl enable your_file_name
. Cuando cambié los objetivos utilicé elsystemclt disable file_name
comando y luego lo volví a habilitar, lo que lo vinculó a los directorios de destino. Reinicie y el servicio estará operativo.fuente
Cree un archivo ejecutable de shell con su script en el directorio /etc/init.d/.
Dado que esto debe ejecutarse durante el apagado o reinicio, es necesario crear enlaces suaves en /etc/rc0.d/ y /etc/rc6.d
Ejemplo:
fuente
chmod
cambia las banderas de permiso del destino del enlace, que es lo mismo para ambos argumentos. Especificarlos a ambos es redundante.Puede encontrar una solución aquí: suspender / reanudar todos los cuadros de Vagrant en el apagado / inicio del sistema .
Hay un script de inicio simple que suspende todos los cuadros en ejecución antes de apagarse.
Instalación
Edite
/etc/init.d/vagrant-boxes
y pegue el script del artículo anterior y guárdelo. O descárguelo desde aquí y guárdelo en/etc/init.d/vagrant-boxes
. En debian / ubuntu, etc., ejecutefuente
Para Ubuntu 14.10, algo así como
RC04
noRC99
Que hacer desde cero
/etc/init.d/scriptName
ln -s /etc/rc6.d/K04scriptName /etc/init.d/scriptName
Pasos por los que pasé
fuente