Как создать сценарий или приложение для автоматического запуска или остановки при загрузке системы, входе пользователя в систему в определенное время, когда диск подключен и т. Д.?
Как создать сценарий или приложение для автоматического запуска или остановки при загрузке системы, входе пользователя в систему в определенное время, когда диск подключен и т. Д.?
Ответы:
Если вы хотите, чтобы что-то запускалось при входе пользователя в систему, самый простой способ - использовать графический интерфейс. Вы можете
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
Есть много дополнительных опций , которые можно найти, экспериментируя с LINGON или читая страницы человека для launchctl
, launchd.plist
, plist
, launchd.conf
и т.д.
launchctl load -w ...
чтобы сделать изменения постоянными. На основании ваших отзывов я обновил скрипт конфигуратора OSX poweruser
Лингон все еще работает. Я просто использовал его на прошлой неделе, чтобы создать «запланированное задание». После того, как я скачал его, мне пришлось использовать его автообновление, чтобы получить последнюю версию, но он работает нормально.
Если необходимо запускаться только при загрузке системы, просто используйте вкладку «Элементы входа» на панели предпочтений «Учетные записи» в «Системных настройках».
Если это скрипт, используйте AppleScript Editor, чтобы сохранить его как приложение. Если это не скрипт AppleScript, вы все равно можете использовать AppleScript для запуска скрипта следующим образом:
do shell script "your script here"
Не забывайте 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
?
Запуск приложения в указанное время может быть легко осуществлен в iCal, как я только что узнал благодаря другому форуму!
Следует помнить одну вещь: если у вас есть несколько компьютеров Mac с общим доступом через iCloud, это событие также будет запускаться в тех приложениях, которые вы можете или не можете захотеть. Чтобы это произошло только на одном Mac, вам нужно создать событие в календаре «На моем Mac», что вы можете сделать следующим образом ...
Я только что узнал об этом сам и был приятно удивлен обоими советами, поэтому решил поделиться ими здесь.
Я получил информацию от этих полезных людей здесь ... так что спасибо вам, люди! ...
http://osxdaily.com/2013/04/15/launch-file-app-scheduled-date-mac-os-x/