Arranque "lento" hasta que todos los dispositivos estén disponibles

1

Estoy usando OS X como servidor, ejecutando Server.app 4.0 para proporcionar alojamiento de correo electrónico / etc.

Adjunto a esta máquina tengo un PROMISE la unidad RAID Pegasus R2 montada en /Volumes/RAID6-11TB , y yo cambiada la ubicación de almacenamiento del servicio predeterminada para que los datos de Server.app se encuentren en la unidad RAID (por redundancia, y para que Backblaze pueda hacer una copia de seguridad de mi precioso correo electrónico, que normalmente ignora /Library ).

El problema es cuando se reinicia la máquina, Server.app no se inicia correctamente, porque algo durante el proceso de arranque está creando un directorio vacío /Volumes/RAID6-11TB/Library/Server/Web/Data/Sites/Default/NetBoot . Cuando la matriz RAID luego se monta automágicamente, su punto de montaje predeterminado ya existe, por lo que se monta en /Volumes/RAID6-11TV 1 , lo que no hace ningún bien.

¿Hay alguna manera de corregir el reinicio para que:

  1. Server.app no se iniciará hasta que el disco RAID esté listo, o
  2. Retrasar el inicio del sistema operativo para que no termine de iniciarse hasta que el disco RAID esté listo?

Respecto a (1), edité /Library/LaunchDaemons/com.apple.serverd.plist para agregar un QueueDirectories clave, pero eso no parece tener ningún efecto, y WatchPaths suena como que tiene la semántica incorrecta, así que estoy poco dispuesto a intentarlo .

Respecto a (2), si inicio en el modo de Usuario Único (manteniendo presionada Command+S durante el inicio), entonces espera hasta que todos hayan finalizado los mensajes, luego golpeó Ctrl+D para continuar el arranque, /Volumes/RAID6-11TB se montó correctamente como se esperaba.

Sin embargo, esto no ayuda a los reinicios automáticos cuando estoy fuera (por ejemplo, después de fallas en el suministro eléctrico). (De acuerdo, la respuesta "correcta" son las copias de seguridad de la batería para que la máquina no se reinicie, pero ignoremos eso por ahora ...)

¿Hay alguna manera de hacer que esto funcione?

    
pregunta jonp 17.12.2014 - 18:24

3 respuestas

1

Dividí la diferencia con @zomgdavidbowie: creé un nuevo script /usr/local/bin/start-server-app :

#!/bin/sh

sleep 120

exec /Library/PrivilegedHelperTools/com.apple.serverd

Luego edité /Library/LaunchDaemons/com.apple.serverd.plist y reemplacé todas las instancias de /Library/PrivilegedHelperTools/com.apple.serverd con /usr/local/bin/start-server-app :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.apple.serverd</string>
    <key>MachServices</key>
    <dict>
        <key>com.apple.serverd</key>
        <true/>
    </dict>
    <key>OnDemand</key>
    <false/>
    <key>Program</key>
    <string>/Library/PrivilegedHelperTools/com.apple.serverd</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Library/PrivilegedHelperTools/com.apple.serverd</string>
    </array>
</dict>
</plist>

Esto me permite seguir con el mecanismo de inicio predeterminado sin profundizar en cron (8), sin dejar de retrasar la invocación com.apple.serverd hasta que se haya montado la unidad externa.

    
respondido por el jonp 19.12.2014 - 21:35
1

Es Server.app el que está creando esa carpeta misteriosa que está arruinando tus trabajos.

Evita que Server.app se inicie cuando se inicie el servidor, y luego puedes crear un cronjob que < a href="https://unix.stackexchange.com/questions/57852/crontab-job-start-1-min-after-reboot"> lo lanza a través de un script .sh.

La secuencia de comandos debería ser algo así como

#!/bin/bash
/Applications/Server.app

y como dijo la persona en el enlace, la entrada cronjob sería algo así como

@reboot sleep 60 && my_script.sh

Eso debería darle a tu RAID el tiempo suficiente para montarlo correctamente antes de que Server.app aparezca y cree esa carpeta.

    
respondido por el zomgdavidbowie 17.12.2014 - 18:53
0

¿Qué te parece esto? En lugar de solo esperar, haz lo siguiente:

#!/bin/sh

if [[ ! -e /Volumes/<volname ]]; then
sleep 60
else
exec /Library/PrivilegedHelperTools/com.apple.serverd
fi
exit 0

Esto debería verificar si su volumen existe, si no, espere 60 segundos, si es así, inicie la aplicación del servidor.

    
respondido por el Kemo 20.04.2015 - 12:31

Lea otras preguntas en las etiquetas