Bagaimana cara menjalankan skrip saat masuk / keluar di OS X?


10

Saya bermain-main dengan membangun manajer render farm kustom, dan saya ingin secara otomatis menambahkan mesin OS X ke render farm ketika sedang tidak digunakan.

Apakah ada cara untuk memicu skrip untuk dijalankan setelah pengguna keluar kemudian berhenti ketika ada pengguna yang masuk?

Jawaban:


9

Ada beberapa cara untuk menjalankan skrip saat login / logout di OS X , ada yang lebih baru dan hanya berlaku untuk 10,5 dan di atas, beberapa agak usang, tetapi yang tercepat adalah menambahkan Login Hook.

Pertama, buat skrip yang ingin Anda jalankan. Buka Terminal dan masukkan:

touch ~/script.sh
open -e !$

Ini akan membuka editor teks. Masukkan skrip, misalnya dengan konten berikut:

#!/bin/sh
# insert your script here

Simpan file. Di terminal Anda, jalankan:

chmod +x ~/script.sh

Ini akan membuat file dapat dieksekusi. Sekarang, mari kita tambahkan itu sebagai sebuah kait:

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

Ada juga Logout Hookrekanannya:

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

Saya sudah menguji ini pada OS X 10.6, dan seharusnya bekerja bahkan hingga 10.8. Perlu diingat bahwa skrip berjalan sebagai rootdan masing-masing hanya ada satu kait untuk masuk dan keluar.

Untuk membatalkan semua itu, masukkan

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

Perhatikan bahwa metode ini tidak disarankan untuk digunakan atau apa pun, tetapi jika Anda hanya menggunakannya seperti yang dinyatakan oleh pertanyaan Anda, itu seharusnya tidak menjadi masalah.


tidak bekerja untuk yosemite
davidcondrey

5

Kait masuk tidak digunakan lagi pada 10.4 untuk launchd. Untuk menjalankan skrip saat masuk, simpan plist seperti ini sebagai ~/Library/LaunchAgents/test.plist. Itu dimuat pada login berikutnya bahkan jika Anda tidak berjalan 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>

Untuk informasi lebih lanjut, lihat man launchd.plistdan posting blog ini .


Menurut posting blog yang tertaut, ini akan memuat plist saat pertama kali Anda masuk, dan tetap memuatnya sampai sistem restart. Bagaimana Anda menggunakan launchd untuk menjalankan skrip di setiap login? Atau saat logout?
ShadSterling

-1

Agar kait ini bekerja di 10.10 Anda harus melakukan ini:

  1. Buka /etc/ttysfile: Di Finder, pilih Buka Folder dari menu Go, ketik /etc/, lalu klik Pergi.

  2. Di jendela yang dihasilkan, buka ttysfile di editor teks pilihan Anda (seperti TextEdit).

  3. Cari baris yang berbunyi:

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

  4. Edit baris ini sehingga terbaca sebagai berikut (tidak ada jeda di baris ini):

    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"

    yaitu, tambahkan (di mana path lengkap ke skrip yang ingin Anda jalankan ketika pengguna masuk) tepat sebelum tanda kutip kedua ( ).-LoginHook /path/to/script/path/to/script"

  5. Simpan file.

Pastikan editor teks yang Anda gunakan untuk mengedit file ini tidak memecah baris di atas menjadi lebih dari satu baris.


atau ikuti instruksi lengkap di sini:

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


tidak bekerja untuk yosemite
davidcondrey
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.