Estoy intentando crear una secuencia de comandos de apagado en macOS (10.11), es decir, una secuencia de comandos que se ejecuta al cerrar, no una secuencia de comandos que cierra el Mac. El sistema linux "rc" no está presente en macOS.
He buscado y buscado una solución, y esta es la única que he podido encontrar. Se inicia al inicio con launchd, y las funciones de inicio y apagado se ejecutan cuando deberían:
#!/bin/bash
function startup()
{
## commands to create and fill ram disk
tail -f /dev/null &
wait $!
}
function shutdown()
{
## commands to backup contents of ramdisk
exit 0
}
trap shutdown SIGTERM
startup;
Como dije, las funciones de inicio () y de apagado () se ejecutan cuando se espera. El problema está dentro de los comandos de la función de apagado. Es un script bastante simple, simplemente copia el contenido del disco RAM a una carpeta en el disco duro:
function backup_ramdisk()
{
## empty ram disk backup folder
rm -R -f /webfolder-backup/*
## copy contents of the ramdisk to the ramdisk backup
cp -R /Volumes/webfolder/ /webfolder-backup/
## make me the owner
chown -R me /webfolder-backup/
chmod -R 777 /webfolder-backup/
exit 0
}
El script real está cargado con extras que registran cosas, y puedo confirmar que el script completo se ejecuta. Pero lo que sucede es que la línea cp
falla. A veces falla completamente, y la carpeta de respaldo está vacía. Pero más a menudo, obtiene parte de la estructura del disco RAM y deja de copiar los archivos (pero no exactamente) en el mismo lugar.
Muchas veces lanzará el error cp: /Volumes/webfolder/: No such file or directory
aunque ya haya copiado cien elementos de esa carpeta. Me hace pensar que el comando de apagado es desmontar el disco RAM antes de que mi secuencia de comandos tenga tiempo de finalizar la copia de seguridad. Tenga en cuenta que, como es un disco RAM, solo toma unos segundos copiar todos los archivos. Pero parece que no es suficiente. Si hubiera una forma en la que pudiera pausar el proceso de apagado mientras mi script se está ejecutando, luego, ¡sería ideal! ¿O tal vez un mejor enfoque de esto por completo?