
Estoy ejecutando ubuntu 11.10 en una máquina virtual (VirtualBox) para aprender más sobre el desarrollo en Linux. Estoy usando un repositorio git para guardar mi trabajo y escribí un script para agrupar mi trabajo y guardarlo en la carpeta compartida para usarlo mientras la máquina virtual no se está ejecutando.
Me gustaría ejecutar este script automáticamente antes de apagarlo para que mi trabajo esté siempre disponible si la máquina virtual está apagada (actualmente tengo que ejecutar el script manualmente).
No sé si advenedizo es la mejor manera de lograr esto, pero esta es la configuración que escribí como prueba:
description "test script to run at shutdown"
start on runlevel [056]
task
script
touch /media/sf_LinuxEducation/start
sleep 15
touch /media/sf_LinuxEducation/start-long
end script
pre-start script
touch /media/sf_LinuxEducation/pre-start
sleep 15
touch /media/sf_LinuxEducation/pre-start-long
end script
post-start script
touch /media/sf_LinuxEducation/post-start
sleep 15
touch /media/sf_LinuxEducation/post-start-long
end script
pre-stop script
touch /media/sf_LinuxEducation/pre-stop
sleep 15
touch /media/sf_LinuxEducation/pre-stop-long
end script
post-stop script
touch /media/sf_LinuxEducation/post-stop
sleep 15
touch /media/sf_LinuxEducation/post-stop-long
end script
El resultado es que sólo se realiza un toque (el primer toque en el pre-inicio). ¿Qué necesito cambiar para que uno de los toques después de dormir funcione? ¿O existe una manera más fácil de lograrlo?
Gracias de antemano.
Respuesta1
ElIntroducción advenediza, libro de cocina y mejores prácticastiene una gran cantidad de fragmentos de código para usar en la creación de tareas y trabajos iniciales.
Elproceso de apagadoLa sección del libro de recetas dice que /etc/init/rc.conf
se ejecutará y llamará /etc/init.d/rc
. A su vez, esto eventualmente llamará /etc/init.d/sendsigs
. Entonces, si lo hace start on starting rc
, su tarea se ejecutará antes de rc (y los términos de firma que normalmente cerrarían el proceso).
archivo: /etc/init/test.conf
description "test script to run at shutdown"
start on starting rc
task
exec /etc/init/test.sh
archivo: /etc/init/test.sh
touch /media/sf_LinuxEducation/start
sleep 15
touch /media/sf_LinuxEducation/start-long
Respuesta2
Creo que esto no se puede hacer a través deadvenedizo, como el/etc/init.d/sendsigsscript, que es invocado poradvenedizoal detener/reiniciar, finaliza todos los procesos ( killall5 -9
) en 10 segundos, e incluso si eso no tiene éxito, desmonta todo y apaga.
La mejor manera sería utilizar el oxidado./etc/init.dguiones de estilo.
Ejemplo:/etc/init.d/shutdown_job
#! /bin/sh
### BEGIN INIT INFO
# Provides: shutdown_job
# Required-Start:
# Required-Stop: sendsigs
# Default-Start:
# Default-Stop: 0 6
# Short-Description: bla
# Description:
### END INIT INFO
PATH=/sbin:/usr/sbin:/bin:/usr/bin
. /lib/lsb/init-functions
do_stop () {
date > /root/s.log
sleep 20
date >> /root/s.log
}
case "$1" in
start)
# No-op
;;
restart|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
stop)
do_stop
;;
*)
echo "Usage: $0 start|stop" >&2
exit 3
;;
esac
:
Luego activa el script.
sudo update-rc.d shutdown_job start 19 0 6 .
Esto pondrá el guión delante delenvíasigsscript en los niveles de ejecución 0 a 6 (apagar, reiniciar). Este script de muestra registrará la fecha, luego dormirá durante 20 segundos y luego registrará la fecha nuevamente para/root/s.log.)
Más información: