¿Se pueden utilizar rc.shutdown y rc.shutdown.local en OS X Lion?

2

¿Se están utilizando rc.shutdown o rc.shutdown.local en OS X, o se han reemplazado con otra cosa?

Me doy cuenta de que launchd está reemplazando la mayor parte de esto, pero pensé que aún podría usar rc.shutdown.local para ejecutar un script.

Ni siquiera pude encontrar rc.shutdown en ningún lugar de mi sistema.

    
pregunta rubixibuc 25.02.2012 - 10:37

1 respuesta

2

Realmente no tengo idea. Hay una mención de /etc/rc.shutdown.local en /System/Library/LaunchDaemons/com.apple.SystemStarter.plist , pero no estoy del todo seguro de lo que significa. La página del manual para SystemStarter no es de gran ayuda, además de informarnos que está en desuso. Sin embargo, el programa se está ejecutando en mi sistema. Ah, y la cadena /etc/rc.shutdown.local también se encuentra dentro del binario SystemStarter . Mi conjetura es que los archivos se ejecutarán en el cierre.

Pero si puedo responder a tu pregunta implícita de cómo ejecutar algo en el cierre: Esto es lo que he hecho. Primero, escribí y compilé este pequeño programa en C. Lo que hace es simplemente dormir hasta que recibe un SIGTERM, momento en el que ejecuta sus argumentos:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>

char **args;

void sigterm(int s) {
  execvp(args[1],args+1);
  fprintf(stderr, "%s: exec failed: ", args[0]);
  perror(args[1]);
  exit(1);
}

int main(int argc, char *argv[]) {
  args=argv;
  signal(SIGTERM,sigterm);
  for (;;) sleep(0x7FFFFFFF);
}

Tengo un demonio de inicio configurado para ejecutar este programa al inicio. Cuando llegue el momento de la parada, launchd enviará el SIGTERM que hace que el programa haga su trabajo. Por supuesto, tiene que hacerlo bastante rápido, o launchd aplicará un martillo más grande.

Aquí está mi launchctl plist, llamado no.ntnu.math.hanche.quietboot.plist y colocado en /Library/LaunchDaemons/ . Su único propósito es ejecutar 'nvram SystemAdioVolume =% 01' en el cierre, para que pueda reiniciar sin el timbre.

<?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>no.ntnu.math.hanche.quietboot</string>
    <key>ProgramArguments</key>
    <array>
        <string>/local/bin/atshutdown</string>
        <string>/usr/sbin/nvram</string>
        <string>SystemAudioVolume=%01</string>
    </array>
    <key>Disabled</key>
    <false/>
    <key>KeepAlive</key>
    <false/>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>
    
respondido por el Harald Hanche-Olsen 25.02.2012 - 11:30

Lea otras preguntas en las etiquetas