Come eseguire script all'avvio e arresto OS X El Capitan

5

In realtà voglio creare un'unità RAM relativa a questo script su il mio Mac.

Ecco cosa ho fatto:

  1. SIP disabilitato in modalità di ripristino utilizzando il comando "csrutil"
  2. Crea un file plist in / Library / LaunchDaemons /
    e inserito launchctl -w /Library/LaunchDaemons/vn.magik.ramdisk.plist

    <?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>vn.magik.ramdisk</string>
            <key>ProgramArguments</key>
                <array>
                  <string>/Users/khacpm/ramdisk.sh</string>
                </array>
            <key>RunAtLoad</key>
                <true/>
            <key>StandardOutPath</key>
                <string>/Users/khacpm/ramdisk.log</string>
            <key>StandardErrorPath</key>
                <string>/Users/khacpm/ramdisk.err</string>
        </dict>
    </plist>
    
  3. Crea un file .sh e inseriscilo in ~ / ramdisk.sh

    codice:

    function fstartup()
    {
        //put folder into ramdisk
    }
    function fshutdown()
    {
        //detach ramdisk
    }
    
    function framdisk()
    {
        //do something
    }
    trap fshutdown SIGTERM
    trap fshutdown SIGKILL
    fstartup;
    

Il problema è che la funzione fstartup funziona bene, ma sembra che la funzione fshutdown non venga chiamata dal sistema.

    
posta Anh Bảy 03.10.2015 - 15:04
fonte

2 risposte

1

Credo che la correzione dello script di shell dovrebbe essere:

function fstartup()
{
    //put folder into ramdisk
     tail -f /dev/null &
     wait $!
}
function fshutdown()
{
    //detach ramdisk

}

function framdisk()
{
    //do something
}
trap fshutdown SIGTERM
trap fshutdown SIGKILL
fstartup;

Quindi attenderà durante l'avvio, non lo spegnimento.

Al momento sto eseguendo la mia versione e sembra funzionare correttamente, esegue correttamente la funzione di spegnimento quando il computer si sta spegnendo.

    
risposta data 20.09.2017 - 21:57
fonte
0

Ho trovato un bug nel mio script: Mancano queste righe nella funzione fshutdown:

tail -f /dev/null &
wait $!

la funzione corretta è:

function fstartup()
{
    //put folder into ramdisk
}
function fshutdown()
{
    //detach ramdisk
     tail -f /dev/null &
     wait $!
}

function framdisk()
{
    //do something
}
trap fshutdown SIGTERM
trap fshutdown SIGKILL
fstartup;

base su documento Apple , quando il sistema si chiude in basso, invia un segnale SIGTERM a tutti i daemon che ha iniziato.
Ma il mio vecchio script verrà eseguito e si chiuderà dopo l'avvio.
Devi rendere vivo il tuo script e attendere il segnale Sigterm aggiungendo alcune funzioni come "sleep" o "wait" per rendere lo script vivo.

    
risposta data 06.10.2015 - 08:44
fonte

Leggi altre domande sui tag