5 votos

Cómo ejecutar script al iniciar y apagar OS X El Capitan

En realidad quiero hacer una unidad RAM relacionada con este script en mi Mac.

Esto es lo que hice:

  1. Desactivado SIP en modo de recuperación mediante el comando "csrutil"

  2. Creado un archivo plist en /Library/LaunchDaemons/
    y entró 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. Creé el archivo .sh y lo puse en ~/ramdisk.sh

    código:

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

El problema es que la función fstartup funciona bien pero parece que la función fshutdown no es llamada por el sistema.

1voto

Andrew Wright Puntos 11

Creo que la corrección del shell script debería ser:

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;

Para que espere durante el arranque, no durante el apagado.

Actualmente estoy ejecutando mi versión y parece funcionar bien, ejecuta correctamente la función de apagado cuando el ordenador se apaga.

0voto

Anh Bảy Puntos 151

He encontrado un error en mi script: Faltan estas líneas en la función fshutdown:

tail -f /dev/null &
wait $!

la función correcta es:

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;

en base a documento de la Apple Cuando el sistema se apaga, envía una señal SIGTERM a todos los demonios que ha iniciado.
Pero mi viejo script se ejecutará y se cerrará por sí mismo después de que se inició.
Tienes que hacer que tu script esté vivo y esperar la señal de Sigterm añadiendo algunas funciones como "sleep" o "wait" para que el script esté vivo.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X