Да, можно использовать определить ключевое слово для объявления многострочной переменной, как это:
define ANNOUNCE_BODY
Version $(VERSION) of $(PACKAGE_NAME) has been released.
It can be downloaded from $(DOWNLOAD_URL).
etc, etc.
endef
хитрая часть вытаскивает Вашу многострочную переменную назад из make-файла. Если Вы просто сделаете очевидную вещь использования "$ эха (ANNOUNCE_BODY)", то Вы будете видеть результат, который другие отправили здесь - оболочка пытается обработать вторые и последующие строки переменной как сами команды.
Однако можно экспортировать значение переменной как есть в оболочку как переменная среды и затем сослаться на него от оболочки как переменная среды (НЕ сделать переменная). Например:
export ANNOUNCE_BODY
all:
@echo "$ANNOUNCE_BODY"
Примечание использование $ANNOUNCE_BODY
, указывая на ссылку на переменную среды оболочки, а не $(ANNOUNCE_BODY)
, который был бы постоянным клиентом, делает ссылку на переменную. Также обязательно используйте кавычки вокруг Вашей ссылки на переменную, удостоверьтесь, что новые строки не интерпретируются самой оболочкой.
, Конечно, этот конкретный прием может быть платформой и чувствительной оболочкой. Я протестировал его на Ubuntu, который Linux с GNU колотит 3.2.13; YMMV.
Вы можете делегировать мониторинг с помощью специального инструмента, такого как Cacti , Centreon или Zenoss , но это может быть немного излишним для одного приложения.
Для простого решения JMX действительно может быть лучшим решением. В качестве отправной точки я предлагаю прочитать следующую статью: Мониторинг локальных и удаленных приложений с помощью JMX 1.2 и JConsole . Затем ознакомьтесь с Использование JConsole для мониторинга приложений , очень подробной статьей, в которой показано, как использовать JConsole для доступа к нескольким основным элементам мониторинга и функции управления, предоставляемые платформой Java, в том числе:
- Обнаружение нехватки памяти
- Включение или отключение подробной трассировки GC и загрузки классов
- Обнаружение взаимоблокировок
- Управление уровнем журнала любых регистраторов в приложении
- Доступ к ОС ресурсы - расширение платформы Sun
- Управление управляемыми компонентами приложения (MBeans)
Но, AFAIK, JMX не предоставит вам доступа к сетевому вводу-выводу, поэтому вам может потребоваться комбинация этих инструментов. К счастью, многие инструменты (например, Cacti, SmokePing ) используют формат RDD, которым вы можете легко управлять с помощью Java API, например JRobin или rdd4j .
Лучше всего заглянуть в / proc, чтобы узнать об использовании всех ресурсов вашей системы / proc / cpuinfo и / proc / net / - хорошее место для начала.