Як я можу запустити / зупинити / перезапустити програму автоматично, під час завантаження / входу / в інший час?


42

Як зробити так, щоб сценарій або додаток автоматично запускалися або припинялися, коли система завантажується, користувач входить у визначений час, коли диск приєднаний тощо?


3
Lingon - це лише додаток для створення файлів .plist для запуску більш зручним для користувачів. Також хтось створив веб-засновника, створеного плістом
Chealion

Бу! plist.spotmac.de, здається, немає. :-(
док.

Відповіді:


44

Метод Гі

Якщо ви хочете щось запустити, коли користувач входить, найпростіший спосіб - це використовувати графічний інтерфейс. Ти можеш

  • Перейдіть на System Prefs > Accounts > Login Itemsекран і додайте туди предмет
    • натискання +символу
    • перетягування та опускання .appна панель
  • На доці відкрийте контекстне меню програми, виберіть Options, а потім виберітьOpen at Login

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

Якщо ви хочете запустити щось, що не є .app, або ви хочете мати більше контролю над його запуском, наприклад:

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

то ви хочете використовувати технічне рішення, яке є launchd.

Найпростіший спосіб налаштування launchdконфігураційного файлу - використовувати інструмент для надання допомоги. На момент написання найпопулярнішим методом є Lingon (який має старішу безкоштовну версію, доступну у SourceForge) або інструмент веб-сайту PList .

Ручне кодування

Якщо ви не хочете використовувати LINGON або Plist сайт і хочете використовувати тільки сирі інструменти , доступні в системі, ви можете написати свій власний launchd plistвручну

Ось мій сценарій запуску для запуску SomeApp безперервно після завантаження системи (незалежно від входу користувача). Він знаходиться в / Система / Бібліотека / 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 ...щоб зміни були стійкими. На основі ваших відгуків я оновив сценарій конфігуратора poweruser для OSX
сортувати

8

Лінгон досі працює. Я просто використовував це минулого тижня для створення "запланованого завдання". Після завантаження мені довелося скористатися його автоматичним оновленням, щоб отримати останню версію, але вона працює чудово.


1
Lingon також зараз знаходиться в App Store
користувач151019

1
Але щоб знайти безкоштовну версію з відкритим кодом, вам потрібно викопати її з Sourceforge. Найновіша комерційна версія також не працює на Leopard (10.5). Але 2.1.1 це - див sourceforge.net/projects/lingon/files/Lingon/2.1.1
nealmcb

7

Якщо потрібно запускатись лише під час завантаження системи, просто перейдіть на вкладку Елементи входу на панелі налаштувань облікових записів у системних налаштуваннях.

alt текст

Якщо це сценарій, використовуйте AppleScript Editor, щоб зберегти його як додаток. Якщо це не сценарій AppleScript, ви все одно можете використовувати AppleScript для запуску такого сценарію:

do shell script "your script here"


Так? Ви впевнені в цьому? У користувальницькому інтерфейсі вашого екрану екрана написано: "Ці елементи відкриються автоматично під час входу в систему" - чи не відрізняється він від того, коли завантажується система? Також ваше посилання здається 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

Крім того, хоча "запуск" - це "шлях Mac", це все ще є цілком життєздатним варіантом і набагато простіше редагувати вручну, ніж запущені файли XML.

Особисто я щасливо заплатив 5 доларів за Лінгона .


Отже сценарій у кодовому блоці слід зберігати як /path/to/script, і sudo defaults write com.apple.loginwindow LoginHook /path/to/script? І сенс запуску сценарію в домашньому каталозі полягає в тому, що кожен користувач може мати власний (чи ні) ~/.loginhook?
Lri

@Lri - так, точно. Вибачте, що не було зрозуміліше. Блок-код може бути /usr/local/bin/loginhook.sh, і, оскільки він працює під коренем, він буде шукати $ HOME / .loginhook, коли користувач входить у систему, і запустити його як цей користувач.
TJ Luoma

4

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

  1. Зробіть нову подію в iCal на час, коли ви хочете, щоб програма відкривалася.
  2. У пункті "Сповіщення" виберіть "Відкрити файл" - значить, ви можете встановити файл для відкриття, який, очевидно, також відкриє програму за замовчуванням для цього типу файлу.
  3. Щоб просто відкрити додаток, а не файл, змініть спадне меню "iCal" на "Інше ..." та виберіть додаток, яке потрібно запустити!

Слід пам’ятати про те, що якщо у вас є декілька Macs-файлів, які діляться через iCloud, ця подія також відбуватиметься в тих додатках, які ви можете або не хочете. Щоб це відбулося лише на одному Mac, вам потрібно створити подію в календарі "На моєму Mac", який ви можете зробити наступним чином ...

  1. Сховати всі інші iCloud або спільні календарі на панелі ліворуч, наведення курсору на назву календаря та натискання кнопки «приховати», яка з’явиться.
  2. Тепер клацніть правою кнопкою миші (або клацніть опцію, якщо ви повністю кретен і досі не зрозуміли, що у вас є більше ніж один палець, і ви можете змінити свої налаштування миші, так що це трохи корисніше, ніж його "крейдовий цегла за замовчуванням для стану кретинів" ) та виберіть "Новий календар".
  3. Оскільки всі спільні календарі приховані, цей новий календар буде створений як "На моєму Mac" і буде локальним для цього Mac.

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

Я отримав інформацію від цих корисних людей тут ... тож дякую вам, люди! ...

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

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