Как запустить скрипт при входе / выходе из системы в OS X?

10

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

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

user36659
источник

Ответы:

10

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

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

slhck
источник
не работает для
Йосемити
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И этот блог .

LRI
источник
Согласно сообщению в блоге, он будет загружать список при первом входе в систему и сохранять его загруженным до перезагрузки системы. Как вы используете launchd для запуска скрипта при каждом входе в систему? Или при выходе?
ShadSterling
-1

Чтобы эти хуки работали в 10.10, вам нужно сделать это:

  1. Откройте /etc/ttysфайл: в Finder выберите «Перейти к папке» в меню «Перейти», введите /etc/, затем нажмите «Перейти».

  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"

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

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

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


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

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

помет
источник
не работает для
Йосемити