9

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

Есть ли способ запустить сценарий для запуска после того, как любой пользователь вышел из системы, а затем остановить, когда любой пользователь вошел в систему?

3 ответа3

9

Существует несколько способов запуска сценариев при входе / выходе из системы в OS 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

Обратите внимание, что этот метод не рекомендуется для развертывания или чего-либо еще, но если вы используете его только так, как указано в вашем вопросе, это не должно быть проблемой.

5

Хуки входа в систему устарели в 10.4 в пользу launchd. Чтобы запустить скрипт при входе в систему, сохраните этот лист в виде ~/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 и этот пост в блоге.

-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"

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

  5. Сохраните файл.

Убедитесь, что текстовый редактор, который вы используете для редактирования этого файла, не разбивает строку выше на более чем одну строку.


или следуйте полной инструкции здесь:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .