Czy rc.shutdown i rc.shutdown.local są nadal użyteczne w systemie OS X Lion?

2

Czy system operacyjny OS X jest używany rc.shutdownlub rc.shutdown.localnadal jest używany, czy też zastąpiono go czymś innym?

Zdaję sobie sprawę, że launchdto zastępuje większość z nich, ale pomyślałem, że nadal możesz użyć rc.shutdown.localdo uruchomienia skryptu.

Nie mogłem nawet znaleźć rc.shutdown nigdzie w moim systemie.

rubiksibuc
źródło
Jest wzmianka o tym /etc/rc.shutdown.localw /System/Library/LaunchDaemons/com.apple.SystemStarter.plist, ale nie jestem wcale pewien, co to znaczy. Strona podręcznika dla SystemStarternie jest świetną pomocą, poza informowaniem nas, że jest przestarzała. Program działa jednak w moim systemie. Och, a łańcuch /etc/rc.shutdown.localznajduje się w SystemStarterpliku binarnym. Domyślam się, że pliki będą uruchamiane przy zamykaniu.
Harald Hanche-Olsen
1
Twoje życzenie jest moje ⌘.
Harald Hanche-Olsen

Odpowiedzi:

2

Naprawdę nie mam pojęcia. Jest wzmianka o tym /etc/rc.shutdown.localw /System/Library/LaunchDaemons/com.apple.SystemStarter.plist, ale nie jestem wcale pewien, co to znaczy. Strona podręcznika dla SystemStarternie jest świetną pomocą, poza informowaniem nas, że jest przestarzała. Program działa jednak w moim systemie. Aha, a łańcuch /etc/rc.shutdown.localznajduje się również w SystemStarterpliku binarnym. Domyślam się, że pliki będą uruchamiane przy zamykaniu.

Ale jeśli mogę odpowiedzieć na twoje ukryte pytanie, jak uruchomić coś przy wyłączaniu: oto co zrobiłem. Najpierw napisałem i skompilowałem ten mały program C. To, co robi, to po prostu spać, dopóki nie otrzyma SIGTERM, w którym to momencie exec wykonuje swoje argumenty:

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

Mam skonfigurowanego demona uruchamiania do uruchamiania tego programu podczas uruchamiania. Przyjdź czas zamknięcia, launchdwyśle ​​SIGTERM, który powoduje, że program robi swoje. Oczywiście musi to zrobić dość szybko lub launchdzastosuje większy młot.

Oto mój launchctllist, nazwany no.ntnu.math.hanche.quietboot.plisti umieszczony w /Library/LaunchDaemons/. Jego jedynym celem jest uruchomienie `nvram SystemAdioVolume =% 01 'przy wyłączaniu, dzięki czemu mogę zrestartować komputer bez gongu.

<?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
źródło
To jest naprawdę fajne :-). +1. Naprawdę szukam informacji na temat tych plików, ponieważ staram się lepiej zrozumieć, co się stało z tymi plikami i czy nadal działają. Niektóre osoby używają rc.shutdown.local i jest w wielu tutorialach i chcę wiedzieć, czy nadal mogę zastosować je do lwa.
rubixibuc