Sind rc.shutdown und rc.shutdown.local unter OS X Lion noch verwendbar?

2

Werden sie in OS X verwendet rc.shutdownoder rc.shutdown.localnoch verwendet oder wurden sie durch etwas anderes ersetzt?

Mir ist klar, dass dies launchddas meiste ersetzt, aber ich dachte, Sie könnten trotzdem rc.shutdown.localein Skript ausführen.

Ich konnte nicht einmal rc.shutdown irgendwo auf meinem System finden.

rubixibuc
quelle
Es gibt eine Erwähnung von /etc/rc.shutdown.localin /System/Library/LaunchDaemons/com.apple.SystemStarter.plist, aber ich bin mir überhaupt nicht sicher, was es bedeutet. Die Handbuchseite für SystemStarterist keine große Hilfe, außer uns mitzuteilen, dass sie veraltet ist. Das Programm läuft jedoch auf meinem System. Oh, und die Zeichenfolge /etc/rc.shutdown.localbefindet sich in der SystemStarterBinärdatei. Ich vermute, dass Dateien dort beim Herunterfahren ausgeführt werden.
Harald Hanche-Olsen
1
Dein Wunsch ist mein ⌘.
Harald Hanche-Olsen

Antworten:

2

Ich habe wirklich keine Ahnung. Es gibt eine Erwähnung von /etc/rc.shutdown.localin /System/Library/LaunchDaemons/com.apple.SystemStarter.plist, aber ich bin mir überhaupt nicht sicher, was es bedeutet. Die Handbuchseite für SystemStarterist keine große Hilfe, außer uns mitzuteilen, dass sie veraltet ist. Das Programm läuft jedoch auf meinem System. Oh, und die Zeichenfolge /etc/rc.shutdown.localbefindet sich auch in der SystemStarterBinärdatei. Ich vermute, dass Dateien dort beim Herunterfahren ausgeführt werden.

Aber wenn ich Ihre implizite Frage beantworten darf, wie etwas beim Herunterfahren ausgeführt werden soll: Hier ist, was ich getan habe. Zuerst habe ich dieses kleine C-Programm geschrieben und kompiliert. Was es tut, ist einfach zu schlafen, bis es ein SIGTERM erhält, an welchem ​​Punkt es seine Argumente ausführt:

#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);
}

Ich habe einen Start-Daemon eingerichtet, um dieses Programm beim Start auszuführen. Wenn die Zeit zum Herunterfahren gekommen ist, launchdwird der SIGTERM gesendet, der das Programm veranlasst, seine Sache zu tun. Natürlich muss es ziemlich schnell gehen, oder es launchdwird ein größerer Vorschlaghammer angewendet.

Hier ist meine launchctlPliste, benannt no.ntnu.math.hanche.quietboot.plistund platziert in /Library/LaunchDaemons/. Sein einziger Zweck ist es, `nvram SystemAdioVolume =% 01 'beim Herunterfahren auszuführen, damit ich ohne das Signal neu starten kann.

<?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>
Harald Hanche-Olsen
quelle
Das ist echt cool :-). +1. Ich suche wirklich nach Informationen zu diesen Dateien, weil ich versuche, ein besseres Verständnis dafür zu bekommen, was mit diesen Dateien passiert ist und ob sie noch funktionieren. Einige Leute benutzen rc.shutdown.local und es ist in vielen Tutorials und ich möchte wissen, ob ich diese noch auf lion anwenden kann.
Rubixibuc