"Rallenta" l'avvio fino a quando tutti i dispositivi sono disponibili

1

Sto usando OS X come server, eseguendo Server.app 4.0 per fornire hosting di posta elettronica / ecc.

Collegato a questa macchina ho un PROMISE Pegasus R2 RAID drive montato a /Volumes/RAID6-11TB , e I modificato il percorso di archiviazione di servizio predefinito in modo che i dati Server.app si trovino sull'unità RAID (per ridondanza e in modo che Backblaze possa eseguire il backup della mia preziosa email, che normalmente ignora /Library ).

Il problema si verifica quando si riavvia la macchina, Server.app non si avvia correttamente, perché qualcosa durante il processo di avvio è che crea una directory vuota /Volumes/RAID6-11TB/Library/Server/Web/Data/Sites/Default/NetBoot . Quando l'array RAID viene montato automagicamente in un secondo momento, il suo mountpoint predefinito esiste già, quindi viene montato su /Volumes/RAID6-11TV 1 , il che non è affatto positivo.

C'è un modo per risolvere il riavvio in modo che:

  1. Server.app non verrà avviato fino a quando il disco RAID non sarà pronto o
  2. Ritarda l'avvio del sistema operativo in modo che non termini l'avvio finché il disco RAID non è pronto?

Riguardo a (1), ho modificato /Library/LaunchDaemons/com.apple.serverd.plist per aggiungere un QueueDirectories , ma sembra che non abbia alcun effetto e WatchPath suona come se avesse la semantica sbagliata, quindi mi spiace anche solo provarlo .

Per quanto riguarda (2), se avvio nella modalità Utente singolo (tenendo premuto Command+S durante l'avvio), quindi aspetta finché i tutti non sono stati completati, poi colpisci Ctrl+D per continuare l'avvio, /Volumes/RAID6-11TB è correttamente montato come previsto.

Tuttavia, questo non è di aiuto per i riavvii automatici quando sono lontano (ad esempio dopo interruzioni di corrente). (OK, la risposta "corretta" è il backup della batteria in modo che la macchina non si riavvii, ma ignoriamolo per ora ...)

C'è un modo per farlo funzionare?

    
posta jonp 17.12.2014 - 18:24
fonte

3 risposte

1

Ho diviso la differenza con @zomgdavidbowie: ho creato un nuovo script /usr/local/bin/start-server-app :

#!/bin/sh

sleep 120

exec /Library/PrivilegedHelperTools/com.apple.serverd

Ho quindi modificato /Library/LaunchDaemons/com.apple.serverd.plist e sostituito tutte le istanze di /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>

Questo mi consente di rimanere con il meccanismo di avvio predefinito senza scavare in cron (8), continuando a ritardare il richiamo di com.apple.serverd fino a dopo aver montato l'unità esterna.

    
risposta data 19.12.2014 - 21:35
fonte
1

È Server.app che sta creando quella misteriosa cartella che ti fa schifo.

Arresta il server.app dall'avvio all'avvio del server, quindi puoi creare un cronjob che < a href="https://unix.stackexchange.com/questions/57852/crontab-job-start-1-min-after-reboot"> avvia tramite uno script .sh.

Lo script dovrebbe essere qualcosa di simile a

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

e come la persona che ha detto nell'unico link, la voce cronjob sarebbe qualcosa sulla falsariga di

@reboot sleep 60 && my_script.sh

Questo dovrebbe dare al tuo RAID abbastanza tempo per essere montato correttamente prima che Server.app compaia e crei quella cartella.

    
risposta data 17.12.2014 - 18:53
fonte
0

Che ne dici di questo, invece di aspettare, fai quanto segue:

#!/bin/sh

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

Questo dovrebbe controllare se il volume è esistente, se no, attendere 60 secondi, in caso affermativo, avviare l'app del server.

    
risposta data 20.04.2015 - 12:31
fonte

Leggi altre domande sui tag