Как я могу запустить / остановить / перезапустить приложение автоматически, при загрузке / входе в систему / в другое время?

42

Как создать сценарий или приложение для автоматического запуска или остановки при загрузке системы, входе пользователя в систему в определенное время, когда диск подключен и т. Д.?

prosseek
источник
3
Lingon - это просто приложение для создания файлов .plist для более удобного запуска. Также кто-то сделал веб-интерфейс для запуска запустившего
plist
Бу! plist.spotmac.de, кажется, уже нет. :-(
docwhat

Ответы:

44

Gui Метод

Если вы хотите, чтобы что-то запускалось при входе пользователя в систему, самый простой способ - использовать графический интерфейс. Вы можете

  • Перейдите на System Prefs > Accounts > Login Itemsэкран и добавьте элемент
    • нажав на +символ
    • перетаскивая .appна панель
  • В доке откройте контекстное меню для приложения, выберите Options, затем выберитеOpen at Login

Метод запуска

Если вы хотите запустить что-то, что не является .app, или вы хотите иметь больший контроль над его запуском, например:

  • в определенное время или через определенный интервал
  • постоянно перезапускается в случае сбоя
  • не относится к логину пользователя
  • как функция доступа к сети
  • запускается только когда запущен другой процесс
  • когда файл добавляется в папку
  • и т.п.

тогда вы хотите использовать техническое решение, которое есть launchd.

Самый простой способ настроить launchdконфигурационный файл - использовать инструмент для помощи. На момент написания статьи самым популярным методом был Lingon (более старая бесплатная версия которого доступна на SourceForge) или инструмент PList Website .

Ручное кодирование

Если вы не хотите использовать Lingon или веб-сайт PList и хотите использовать только необработанные инструменты, доступные в системе, вы можете написать свои собственные launchd plistвручную.

Вот мой скрипт launchd для запуска SomeApp непрерывно после загрузки системы (независимо от входа пользователя). Он находится в / System / Library / LaunchAgents / и называется SomeApp.restart.plist. Если он запускается на основе имени пользователя, он может храниться в ~ / Library / LaunchAgents /

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>RunAtLoad</key>  
        <true/>
        <key>KeepAlive</key>
        <true/>
        <key>Label</key>
        <string>SomeApp.restart</string>
        <key>ProgramArguments</key>
        <array>
                <string>/path/to/SomeApp.app/Contents/MacOS/SomeApp</string>
        </array>
        <key>StartCalendarInterval</key>
        <dict>
            <key>Hour</key>
            <integer>5</integer>
            <key>Minute</key>
            <integer>10</integer>
       </dict>
</dict>
</plist>

Загрузите его один раз

launchctl load ~/Library/LaunchAgents/SomeApp.restart.plist
  • RunAtLoadОпция запустит приложение в первый раз launchctl работает это.
  • KeepAliveВариант будет повторно запустить приложение , если он выходит из строя.
  • Он StartCalendarIntervalбудет запущен в определенное время. Предположительно, это является взаимоисключающим с предыдущими двумя, но включено, чтобы показать, что можно сделать сlaunchd
  • Launchctl запустит это после перезагрузки.

Есть много дополнительных опций , которые можно найти, экспериментируя с LINGON или читая страницы человека для launchctl, launchd.plist, plist, launchd.confи т.д.


источник
Спасибо, действительно полезно. Вы также можете использовать, launchctl load -w ...чтобы сделать изменения постоянными. На основании ваших отзывов я обновил скрипт конфигуратора OSX poweruser
sorin
8

Лингон все еще работает. Я просто использовал его на прошлой неделе, чтобы создать «запланированное задание». После того, как я скачал его, мне пришлось использовать его автообновление, чтобы получить последнюю версию, но он работает нормально.

Роберт С Чаччо
источник
1
Lingon также теперь в App Store
user151019
1
Но чтобы найти бесплатную версию с открытым исходным кодом, вам нужно выкопать ее из Sourceforge. Последняя коммерческая версия также не работает на Leopard (10.5). Но 2.1.1 это - см sourceforge.net/projects/lingon/files/Lingon/2.1.1
nealmcb
7

Если необходимо запускаться только при загрузке системы, просто используйте вкладку «Элементы входа» на панели предпочтений «Учетные записи» в «Системных настройках».

альтернативный текст

Если это скрипт, используйте AppleScript Editor, чтобы сохранить его как приложение. Если это не скрипт AppleScript, вы все равно можете использовать AppleScript для запуска скрипта следующим образом:

do shell script "your script here"

ghoppe
источник
А? Вы уверены, что ? В пользовательском интерфейсе вашего скриншота написано: «Эти элементы будут открываться автоматически при входе в систему» ​​- не отличается ли это от загрузки системы? Кроме того, ваша ссылка, кажется, 404.
SSC
5

Не забывайте Loginhooks.

Хотя они запускаются с правами root, вы должны иметь возможность выполнить скрипт $ HOME / .loginhook, используя что-то вроде этого:

#!/bin/sh

home=`eval echo ~$user`

if [ -x "$home/.loginhook" ]; then
    logger -t $0 "executing .loginhook of user $user"
    su - $user -c "$home/.loginhook"
fi

Затем просто добавьте все необходимые команды в ~ / .loginhook

Кроме того, несмотря на то, что 'launchd' - это "путь Mac", crontab по-прежнему является совершенно жизнеспособным вариантом, и его гораздо проще редактировать вручную, чем файлы XML, запускаемые при запуске.

Лично я с радостью заплатил 5 долларов за Lingon .

Ти Джей Луома
источник
Таким образом, скрипт в блоке кода должен быть сохранен как /path/to/script, а sudo defaults write com.apple.loginwindow LoginHook /path/to/script? А смысл запуска скрипта в домашнем каталоге в том, что у каждого пользователя может быть свой кастом (или нет) ~/.loginhook?
Лри
@Lri - да, именно так. Извините, это не было яснее. Код блока может быть /usr/local/bin/loginhook.sh и, поскольку он запускается пользователем root, он будет искать $ HOME / .loginhook, когда пользователь входит в систему, и запускать его от имени этого пользователя.
TJ Luoma
4

Запуск приложения в указанное время может быть легко осуществлен в iCal, как я только что узнал благодаря другому форуму!

  1. Создайте новое событие в iCal на время, которое вы хотите, чтобы приложение открылось.
  2. В «Alert» выберите «Open File» - таким образом, вы можете настроить открытие файла, что, очевидно, также откроет приложение по умолчанию для этого типа файлов.
  3. Чтобы просто открыть приложение, а не файл, измените раскрывающийся список «iCal» на «Другие ...» и выберите приложение, которое вы хотите запустить!

Следует помнить одну вещь: если у вас есть несколько компьютеров Mac с общим доступом через iCloud, это событие также будет запускаться в тех приложениях, которые вы можете или не можете захотеть. Чтобы это произошло только на одном Mac, вам нужно создать событие в календаре «На моем Mac», что вы можете сделать следующим образом ...

  1. Чтобы скрыть все другие iCloud или общие календари на левой панели, наведите указатель мыши на название календаря и нажмите кнопку «Скрыть», которая появится.
  2. Теперь щелкните правой кнопкой мыши (или щелкните «Option», если вы полностью кретин и до сих пор не поняли, что у вас есть более одного пальца и вы можете изменить настройки мыши, чтобы она была несколько более полезной, чем состояние по умолчанию «Кретинный кирпич для кретинов»). ) и выберите «Новый календарь».
  3. Поскольку все общие календари скрыты, этот новый календарь будет создан как «На моем Mac» и будет локальным для этого Mac.

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

Я получил информацию от этих полезных людей здесь ... так что спасибо вам, люди! ...

http://osxdaily.com/2013/04/15/launch-file-app-scheduled-date-mac-os-x/

Slowboy
источник