Jaki jest najłatwiejszy sposób uruchomienia skryptu podczas uruchamiania systemu w OS X?

12

Chcę, aby skrypt (bash / zsh / ruby ​​/ ...) działał w czasie uruchamiania systemu OS X. Jaki jest najprostszy sposób, aby to zrobić, bez bałaganu w plikach xml / plist i najlepiej bez potrzeby tworzenia meta AppleScript .

John Bachir
źródło

Odpowiedzi:

7

MacOS X używa Vixie cron, który ma specjalne metatagi do uruchamiania w czasie ponownego uruchamiania. Zobacz stronę podręcznika dla formatu pliku.

coś jak:

@reboot /path/to/script.sh

w twoim crontabie by działało. Nie jestem pewien, czy jest to lepsze rozwiązanie niż uruchomione, prawdopodobnie masz więcej narzędzi meta, które wyglądają na uruchomione niż cron.

Rich Homolka
źródło
Uwielbiam to, udowodniłeś, że się mylę :-) Chociaż cronw OS X domyślnie nie jest tak świetnie z logowaniem (kilka dni temu był na ten temat).
Daniel Beck
to jest doskonałe.
John Bachir
1
Zauważ, że cron, at i tak dalej są w pewnym stopniu przestarzałe w OS X. Nie mogę znaleźć wyraźnego stwierdzenia tego w różnych dokumentach, ani nie wiem, jak agresywnie są przestarzałe, ale uruchomienie wydaje się ogólnie preferowane. Zobacz wprowadzoną dokumentację dla wprowadzenia.
Norman Gray
Plist nie działa dla mnie - działa jak urok - dziękuję! :-D
BG Bruno
Szczerze mówiąc, nie byłem pewien, czy składnia będzie taka sama w systemie OS X.
NobleUplift,
6

W przypadku zmiany opinii:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.superuser.245713</string>
    <key>ProgramArguments</key>
    <array>
        <string>/path/to/script.sh</string>
    </array>
    <key>UserName</key>
    <string>someuser</string>
</dict>
</plist>

Przechowuj jak com.superuser.245713.plistw /Library/LaunchAgents/i określ root:wheelwłaściciela / grupę.

Daniel Beck
źródło
1
Prawdopodobnie lepiej jest w to włożyć, /Library/LaunchAgentsniż /System/Library/LaunchDaemonsponieważ /Systemjest to coś specyficznego dla systemu operacyjnego, a ten poniżej /Libraryjest używany bardziej do rzeczy innych firm. Ponadto LaunchDaemons„powinien zawierać elementy, które będą działały jako root, ogólnie procesy w tle”, gdzie LaunchAgents„jako użytkownik lub w kontekście użytkownika”. Źródłem tych cytatów jest świetny artykuł o wydaniu, z którym konsultuję się w sprawie pytań.
Doug Harris
@DougHarris Dzięki za sugestie! Muszę przyznać, że właśnie pisałem ten ad-hoc - chociaż zwykle testuję swoje rozwiązania, nie byłem skłonny do ponownego uruchomienia komputera.
Daniel Beck
Jest to bardzo miłe, chociaż bardziej podoba mi się rozwiązanie Vixie cron :)
John Bachir
Właściwie należy go umieścić w / Library / LaunchDaemons. Agenty działają tylko w sesji użytkownika, tzn. Nie będą działać (a ściślej kwalifikują się do uruchomienia), dopóki ktoś się nie zaloguje, będą uruchamiane za każdym razem, gdy ktoś się zaloguje, i zawsze będą działać jako użytkownik aktualnie zalogowany. Demony działają (/ stają się uprawnione do uruchamiania) podczas rozruchu i podczas gdy normalnie działają jako root, mogą być uruchamiane jak każdy inny użytkownik z kluczem UserName.
Gordon Davisson,
2
@ the0ther Sieć nie zapomina.
Daniel Beck
2

Istnieją również haki logowania, jeśli wolisz, aby skrypt był uruchamiany (jako root), gdy użytkownik loguje się zamiast podczas uruchamiania komputera.

Deditos
źródło