Почему Вы не должны использовать ОТЛИЧНЫЙ, когда Вы могли использовать GROUP BY?

Просто используйте launchd. Это - очень мощная система средства запуска, и между тем это - стандартная система средства запуска для Mac OS X (текущая версия OS X даже не загрузилась бы без него). Для тех, кто не знаком с launchd (или с OS X в целом), он похож на гибрид между init, cron, at, SysVinit (init.d), inetd, upstart и systemd. При заимствовании понятия всех этих проектов все же также предложении вещей Вы не можете найти в другом месте.

Каждый сервис/задача является файлом. Местоположение файла зависит от вопросов: "Когда эта услуга, как предполагается, работает?" и, "В котором будут нужны полномочия сервис?"

Системные задачи переходят в [1 132]

/Library/LaunchDaemons/

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

, Если они должны только работать, если какой-либо пользователь будет зарегистрирован, они переходят в [1 134]

/Library/LaunchAgents/

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

, Если они должны работать, только если Вы зарегистрированы, они переходят в [1 136]

~/Library/LaunchAgents/

, где ~ является Ваш Корневой каталог. Они определяют задачу, будет работать с Вашими полномочиями, так же, как если бы Вы запустили их сами командной строкой или путем двойного щелчка по файлу в Средстве поиска.

Примечание, которое там также существует /System/Library/LaunchDaemons и /System/Library/LaunchAgents, но как обычно, всем под [1 116] управляет OS X. Вы не должны помещать файлы туда, Вы не должны изменять файлы там, если Вы действительно не будете знать то, что Вы делаете. Бездельничание в папке Systems может сделать Вашу систему неприменимой (получите его в состояние, где это даже откажется загружаться снова). Это каталоги, куда Apple помещает launchd задачи, которые будят Вашу систему и работающий во время начальной загрузки, автоматически запускают сервисы как требуется, выполняют задачи обслуживания системы и так далее.

Каждый launchd задачей там является файл в формате plist. Это должно иметь обратную нотацию доменного имени. Например, можно назвать задачу

com.example.my-fancy-task.plist

, Этот plist может иметь различные варианты и настройки. Запись один на руку является субоптимальной, можно хотеть заставить бесплатный инструмент Lingon создавать задачи. Этот инструмент раньше был свободен, теперь он стоит 5$ в App Store, и 10$ как не версия App Store (не версия App Store намного более мощна и если Вы уже планируете оплату его, серьезно, получаете не версию App Store). Если кто-либо знает сопоставимый инструмент, который является бесплатным программным обеспечением или открытым исходным кодом, напишите мне в комментариях, и я скорее рекомендую, что один (не хотят рекламировать здесь для коммерческого программного обеспечения).

Так же, как пример, это могло быть похожим на это





    Label
    com.example.my-fancy-task
    OnDemand
    
    ProgramArguments
    
        /bin/sh
        /usr/local/bin/my-script.sh
    
    StartInterval
    1800


, Этот агент будет выполнять сценарий оболочки/usr/local/bin/my-script.sh каждые 1800 секунд (каждые 30 минут). Можно было также работать на задаче определенные даты/времена (в основном launchd, может сделать все, что крон может сделать), или можно даже отключить "OnDemand" порождение launchd для хранения постоянно рабочего процесса (если это выйдет или откажет, то launchd сразу перезапустит его). Можно даже ограничить, сколько ресурсов может использовать процесс (как сказано прежде, Lingon показывает все эти настройки в хорошем интерфейсе UI).

Обновление: Даже при том, что OnDemand все еще поддерживается, это удерживается от использования. Новую установку называют KeepAlive, который имеет намного больше смысла. Это может иметь булево значение, в этом случае это - полная противоположность [1 121] (установка, это к [1 122] ведет себя, как будто OnDemand true и наоборот). Большая новая возможность, что она может также иметь значение словаря вместо булева. Если это имеет значение словаря, у Вас есть несколько дополнительных опций, которые дают Вам больше мелкозернистого контроля, под которым обстоятельствами должна быть поддержана задача. Например, это только поддерживается пока программа, завершенная с кодом выхода нуля, только, пока определенный файл/каталог на диске существует, только если другая задача также жива, или только если сеть в настоящее время.

Также можно вручную позволить/запретить задачи через командную строку:

launchctl  

команда может быть загрузкой или разгрузиться, чтобы загрузить plist или разгрузить ее снова, в этом случае параметр является путем к файлу. Или команда может быть запуском или остановкой, чтобы только запустить или остановить такую задачу, в этом случае параметр является маркировкой (com.example.my-fancy-task). Другие команды и опции существуют также.

Видят документацию Apple plist формат , и launchctl инструмент командной строки (обратите внимание, что можно выбрать версию OS X на вершине, так как формат/опции действительно варьируется между различными выпусками OS X)

12
задан Jonathan Leffler 3 June 2012 в 07:00
поделиться

3 ответа

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

SELECT DISTINCT CustomerId, CustomerName FROM (...)

, чем это:

SELECT CustomerId, CustomerName FROM (...) GROUP BY CustomerId

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

8
ответ дан 2 December 2019 в 23:07
поделиться
SELECT Code
FROM YourTable
GROUP BY Code

vs

SELECT DISTINCT Code
FROM YourTable
1
ответ дан 2 December 2019 в 23:07
поделиться

Основное правило: поместите все столбцы из предложения SELECT в предложение GROUP BY

, чтобы

SELECT DISTINCT a,b,c FROM D

превратилось в

SELECT a,b,c FROM D GROUP BY a,b,c
0
ответ дан 2 December 2019 в 23:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: