Come eseguire uno script al login / logout in OS X?


10

Sto giocando con la creazione di un gestore di render farm personalizzato e voglio aggiungere automaticamente macchine OS X alla render farm quando non sono in uso.

C'è un modo per attivare l'esecuzione di uno script dopo che un utente si è disconnesso e poi si ferma quando un utente ha effettuato l'accesso?

Risposte:


10

Esistono diversi modi per eseguire script al login / logout in OS X , alcuni sono più recenti e si applicano solo a 10.5 e versioni successive, alcuni sono piuttosto deprecati, ma il più veloce sarebbe quello di aggiungere un Login Hook.

Innanzitutto, crea lo script che desideri eseguire. Apri un Terminale e inserisci:

touch ~/script.sh
open -e !$

Questo aprirà un editor di testo. Immettere lo script, ad esempio con i seguenti contenuti:

#!/bin/sh
# insert your script here

Salva il file. Nel tuo terminale, esegui:

chmod +x ~/script.sh

Questo renderà il file eseguibile. Ora, aggiungiamolo come hook:

sudo defaults write com.apple.loginwindow LoginHook /usr/local/bin/script.sh 

C'è anche la Logout Hookcontroparte:

sudo defaults write com.apple.loginwindow LogoutHook /usr/local/bin/script2.sh

Ho provato questo su OS X 10.6 e dovrebbe funzionare anche fino a 10.8. Tieni presente che lo script viene eseguito come roote esiste un solo hook per il login e il logout rispettivamente.

Per annullare tutto ciò, inserisci

sudo defaults delete com.apple.loginwindow LoginHook
sudo defaults delete com.apple.loginwindow LogoutHook

Si noti che questo metodo non è consigliato per la distribuzione o altro, ma se lo si utilizza solo come indicato nella domanda, ciò non dovrebbe essere un problema.


non funziona per yosemite
davidcondrey,

5

Gli hook di accesso sono stati deprecati in 10.4 a favore di launchd. Per eseguire uno script all'accesso, salvare un plist come questo come ~/Library/LaunchAgents/test.plist. Viene caricato al prossimo accesso anche se non si esegue launchctl load ~/Library/LaunchAgents/test.plist.

<?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>test</string>
    <key>ProgramArguments</key>
    <array>
        <string>say</string>
        <string>test</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Per ulteriori informazioni, consultare man launchd.pliste questo post sul blog .


Secondo il post sul blog collegato, questo caricherà il plist al primo accesso e lo manterrà caricato fino al riavvio del sistema. Come usi launchd per eseguire uno script ad ogni accesso? O al logout?
ShadSterling,

-1

Per far funzionare questi hook in 10.10 dovrai fare questo:

  1. Apri il /etc/ttysfile: nel Finder, scegli Vai alla cartella dal menu Vai, digita /etc/, quindi fai clic su Vai.

  2. Nella finestra risultante, apri il ttysfile nel tuo editor di testo preferito (come TextEdit).

  3. Cerca una riga che reciti:

    console "/System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow" vt100 on secure window=/System/Library/CoreServices/WindowServer onoption="/usr/libexec/getty std.9600"

  4. Modifica questa riga in modo che sia la seguente (non ci sono interruzioni in questa riga):

    console "/System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow -LoginHook /path/to/script" vt100 on secure window=/System/Library/CoreServices/WindowServer onoption="/usr/libexec/getty std.9600"

    vale a dire, aggiungere (dove si trova il percorso completo dello script che si desidera eseguire quando un utente accede) appena prima del secondo segno ( ).-LoginHook /path/to/script/path/to/script"

  5. Salva il file.

Assicurarsi che l'editor di testo utilizzato per modificare questo file non interrompa la riga sopra in più di una riga.


oppure segui le istruzioni complete qui:

http://support.apple.com/en-ca/HT2420


non funziona per yosemite
davidcondrey,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.