48

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

# Start the MongoDB server
/Applications/MongoDB/bin/mongod --dbpath /usr/local/mongo/data --fork --logpath /usr/local/mongo/log

Я изучал сеть и думаю, что она находится между ~/.bashrc , ~/profile , /etc/bashrc , /etc/profile или ~/.bash_profile . Хотя я пробовал это, и они, кажется, запускаются при запуске терминала, а не при запуске Mac . Я пропустил файл?

8 ответов8

55

Чтобы запустить команду при запуске в OS X, вам нужно использовать launchd .

Если вы не хотите использовать Lingon, вам нужно создать список свойств для launchd . Это файл XML, так что вы можете сделать это с помощью вашего любимого текстового редактора или, в качестве альтернативы, вы можете использовать редактор списка свойств, который устанавливается с Mac OS X Dev Tools. Создайте следующее:

<?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>some.meaningful.name</string> <!-- org.mongodb.mongodb perhaps? -->

    <key>OnDemand</key>
    <false/>

    <key>UserName</key>
    <string>anAppropriateUser</string>

    <key>GroupName</key>
    <string>anAppropriateGroup</string>

    <key>ProgramArguments</key>
    <array>
            <string>/Applications/MongoDB/bin/mongod</string>
            <string>--dbpath</string>
            <string>/usr/local/mongo/data</string>
            <string>--fork</string>
            <string>--logpath</string>
            <string>/usr/local/mongo/log</string>
    </array>
</dict>
</plist>

Сохраните это в /Library/LaunchAgents/some.meaningful.name.plist (вам понадобится учетная запись администратора и / или sudo), затем откройте терминал и выполните:

sudo launchctl load /Library/LaunchAgents/some.meaningful.name.plist

Это заставит launchd загрузить элемент, что заставит его запустить MongoDB при загрузке. В качестве бонуса, launchd будет следить за ним и, если он выйдет по какой-либо причине, он будет перезапущен. Чтобы избавиться от элемента, просто замените load в приведенной выше команде на unload.

45

Еще одно простое решение от переполнения стека: вы можете:

  • Запустите Automator.app;
  • Выберите "Приложение";
  • Нажмите "Показать библиотеку" на панели инструментов (если скрыто);
  • Добавить "Run shell script" (из Действия / Утилиты);
  • Скопируйте и вставьте ваш скрипт в окно;
  • Попробуй это;
  • Сохраните его где-нибудь: будет создан файл с именем your_name.app );
  • В зависимости от вашей версии MacOSX:
    • Старые версии: перейдите в "Системные настройки" → "Аккаунты" → "Элементы входа" или
    • Новая версия: зайдите в Системные настройки → Пользователи и группы → Элементы входа (вверху справа);
  • Добавьте это вновь созданное приложение;

Выйдите из системы, войдите снова, и все готово. ;)

31

Официально ничего из этого. Apple предложила способ использовать launchd. Guis, чтобы настроить это, включают lingon и Launch Control

Что касается файлов, которые вы упомянули в домашнем каталоге ~/.bashrc, ~/profile, ~/.bash_profile запускаются только при входе через терминал. Те, что в /etc, запускаются оболочкой, которая запускается для всех пользователей до тех, которые находятся в домашнем каталоге, но только после входа пользователя в систему. Руководство по bash

Сценарий запуска Unix включал /etc /rc *, но для OSX просто используйте launchd

25

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

  • Создайте текстовый файл, содержащий ваши команды (скрипт bash):

    #!/bin/bash
    
    # Start the MongoDB server
    /Applications/MongoDB/bin/mongod --dbpath /usr/local/mongo/data --fork --logpath /usr/local/mongo/log
    
  • Сохраните этот файл в ~/Library/Startup.cmd

  • Вы можете проверить это, дважды щелкнув файл в Finder
  • Сделайте его исполняемым: chmod +x ~/Library/Startup.cmd
  • Добавьте этот файл в Системные настройки> Аккаунты> Элементы входа
3

Вам нужно будет посмотреть, как launchd и launchctl работают на MacOS. Вы можете начать с чтения справочных страниц для обеих команд. Затем вы можете посмотреть в /Library/LaunchAgents/ и /Library/LaunchDaemons/ примеры того, как настроить приложения для загрузки в разное время через интерфейс launchctl .

Вот пример, который я нашел по переполнению стека, который может помочь вам в дальнейшем.

3

Если вам нужен подход, который будет работать в Linux и Mac OS X, задачи cron должно быть достаточно (отредактируйте задачи cron, выполнив crontab -e):

@reboot /path/to/script

(Авторы: https://unix.stackexchange.com/questions/49207/how-do-i-set-a-script-that-it-will-run-on-start-up-in-freebsd)

0

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

Стандарт для оболочек входа в систему - всегда искать файлы конфигурации bash с именем "profile" в следующем порядке: /etc /profile, ~ /.bash_profile, затем ~ /.bash_login и, наконец, ~ /.profile. Когда завершаются входы в систему, они читают ~ /.bash_logout.

В моем случае я просто создал ~/.bash_profile, а затем открыл настройки приложения Mac Terminal и изменил параметр "Оболочка открывается с" по умолчанию на /bin /bash. Вот и все. Чисто и просто.

-3

открытый терминал, тип

nano ~/.bash_profile

затем добавьте этот текст в файл:

/Applications/MongoDB/bin/mongod --dbpath /usr/local/mongo/data --fork logpath /usr/local/mongo/log

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