Як запустити скрипт при вході / виході в ОС X?


10

Я розмовляю зі створенням власного менеджера ферми візуалізації, і я хочу автоматично додати машини OS X до ферми візуалізації, коли вони не використовуються.

Чи є спосіб запустити сценарій для запуску після того, як будь-який користувач вийшов із системи, а потім зупинити, коли будь-який користувач увійшов?

Відповіді:


10

Існує кілька способів запуску сценаріїв при вході / виході в ОС X , деякі з них більш пізні і застосовуються лише до версії 10.5 і вище, деякі досить застарілі, але найшвидшим було б додати а Login Hook.

Спочатку створіть сценарій, який потрібно запустити. Відкрийте термінал і введіть:

touch ~/script.sh
open -e !$

Це відкриє текстовий редактор. Введіть сценарій, наприклад, із наступним вмістом:

#!/bin/sh
# insert your script here

Збережіть файл. У своєму терміналі запустіть:

chmod +x ~/script.sh

Це зробить файл виконуваним. Тепер додамо його як гачок:

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

Є також Logout Hookаналог:

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

Я тестував це на OS X 10.6, і він повинен працювати навіть до 10.8. Майте на увазі, що сценарій працює як rootі є лише один гак для входу та виходу відповідно.

Щоб скасувати все це, введіть

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

Зауважте, що цей метод не рекомендується застосовувати для розгортання чи будь-чого іншого, але якщо ви використовуєте його лише так, як вказано у вашому запитанні, це не повинно бути проблемою.


не працює для yosemite
davidcondrey

5

Гачки для входу були застаріли в 10.4 на користь запуску. Щоб запустити сценарій при вході в систему, збережіть такий список, як цей ~/Library/LaunchAgents/test.plist. Він завантажується під час наступного входу, навіть якщо ви не запустите 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>

Для отримання додаткової інформації див man launchd.plistі цьому блозі .


Згідно з пов’язаним дописом у блозі, він буде завантажувати пліст при першому вході в систему та зберігати його, поки система не перезапуститься. Як ви використовуєте запуск для запуску сценарію при кожному вході? Або при виході?
ShadSterling

-1

Щоб ці гачки спрацювали в 10.10, вам потрібно зробити це:

  1. Відкрийте /etc/ttysфайл: у Finder виберіть Перейти до папки в меню Go, введіть /etc/, а потім натисніть Go.

  2. У вікні, що виходить, відкрийте ttysфайл у вибраному текстовому редакторі (наприклад, TextEdit).

  3. Шукайте рядок із таким чином:

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

  4. Відредагуйте цей рядок так, щоб він читав наступним чином (у цьому рядку немає перерв):

    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"

    тобто додайте (де повний шлях до сценарію, який ви хочете виконати, коли користувач входить у систему) безпосередньо перед другою позначкою quo ( ).-LoginHook /path/to/script/path/to/script"

  5. Збережіть файл.

Будьте впевнені, що текстовий редактор, який ви використовуєте для редагування цього файлу, не розбиває рядок вище на один рядок.


або дотримуйтесь повних інструкцій тут:

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


не працює для yosemite
davidcondrey
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.