Демон, входящий в систему Linux

66
задан jww 14 July 2017 в 09:43
поделиться

9 ответов

Unix имел долгое время специальную платформу журналирования, названную системный журнал . Введите в своей оболочке

man 3 syslog

, и Вы получите справку для интерфейса C к ней.

[приблизительно 113] примеры

#include <stdio.h>
#include <unistd.h>
#include <syslog.h>

int main(void) {

 openlog("slog", LOG_PID|LOG_CONS, LOG_USER);
 syslog(LOG_INFO, "A different kind of Hello world ... ");
 closelog();

 return 0;
}
100
ответ дан Vinko Vrsalovic 24 November 2019 в 14:56
поделиться

Этот <забастовка>, вероятно, будет была гонками, но да средство системного журнала, которое существует в большинстве, если не все производные Un*x предпочтительный способ пойти. Нет ничего неправильно с входом в файл, но он действительно оставляет на Ваших плечах количество задач:

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

Системный журнал заботится обо всем этом, и больше, для Вас. API подобен printf клан, таким образом, у Вас не должно быть проблем при адаптации кода.

23
ответ дан Richard 24 November 2019 в 14:56
поделиться

Еще одно преимущество системного журнала в большем (или более сознательный безопасность) установки: демон системного журнала может быть настроен для отправки журналов в другой сервер для записи туда вместо (или в дополнение к) локальная файловая система.

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

11
ответ дан Dave Sherohman 24 November 2019 в 14:56
поделиться

Я выложил много сообщений демона к daemon.info и daemon.debug, когда я - поблочное тестирование. Строка в Вашем syslog.conf может прикрепить те сообщения в любой файл, который Вы хотите.

http://www.linuxjournal.com/files/linuxjournal.com/linuxjournal/articles/040/4036/4036s1.html имеет лучшее объяснение API C, чем страница справочника, imo.

8
ответ дан phreakre 24 November 2019 в 14:56
поделиться

Системный журнал является хорошим вариантом, но можно хотеть рассмотреть рассмотрение log4c. log4 [что-то] платформы работают хорошо в их Java и реализациях Perl, и позволяют, Вы к - от конфигурационного файла - принимаете решение зарегистрироваться или к системному журналу, консоли, плоским файлам или к пользовательским писателям журнала. Можно определить определенные контексты журнала для каждого из модулей и иметь каждый журнал контекста на другом уровне, как определено конфигурацией. (трассировка, отладка, информация, предупреждает, ошибка, очень важная), и перечитайте Вашего демона что конфигурационный файл на лету, захватив сигнал, позволив Вам управлять уровнями журнала на рабочем сервере.

2
ответ дан Jon Topper 24 November 2019 в 14:56
поделиться

Как указано выше необходимо изучить системный журнал. Но если бы Вы хотите записать свой собственный код входа, я советовал бы Вам использовать "a" (запись добавляют), режим fopen.

Несколько недостатков записи Вашего собственного кода входа: обработка вращения Журнала, Блокируя (если у Вас есть несколько потоков), Синхронизация (Вы хотите ожидать журналов, записанных в диск?). Один из недостатков системного журнала - то, что приложение не знает, были ли журналы записаны в диск (они, возможно, были потеряны).

2
ответ дан Mathias Brossard 24 November 2019 в 14:56
поделиться

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

Это старается не регистрировать порождение серьезного замедления в Вашем программном обеспечении, и это старается не создавать heisenbugs, которые изменяются, когда Вы добавляете вход отладки.

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

я обеспечил бы ссылку на некоторый хороший код для этого, но у меня нет того самого. Я просто хочу тот.:)

2
ответ дан Zan Lynx 24 November 2019 в 14:56
поделиться

Наша встроенная система не имеет системного журнала так демоны, которых я пишу, делают отладку в файл с помощью "a" открытый режим, подобный тому, как Вы описали его. У меня есть функция, которая открывает файл журнала, выкладывает сообщение и затем закрывает файл (я только делаю это, когда что-то неожиданное происходит). Однако я также должен был записать код для обработки вращения журнала, как другие комментаторы упомянули, который состоит из 'файла журнала-c 65536 хвоста> logfiletmp & & mv logfiletmp файл журнала'. Это довольно грубо и возможно должно быть названо "журналом лобовыми усечениями", но это мешает нашей маленькой основанной на псевдодиске файловой системе заполниться файлом журнала.

1
ответ дан Matthew Smith 24 November 2019 в 14:56
поделиться

Существует много потенциальных проблем: например, если диск полон, Вы хотите, чтобы Ваш демон перестал работать? Кроме того, Вы будете перезаписывать свой файл каждый раз. Часто корзина для бумаг используется так, чтобы у Вас было место, выделенное на машине для Вашего файла, но можно сохранить достаточно истории, чтобы быть полезными, не занимая слишком много места. Существуют инструменты как log4c, что можно помочь Вам. Если Ваш код является C++, то Вы могли бы рассмотреть log4cxx в проекте Apache (склонный - получают установку liblog4cxx9-dev на ubuntu/debian), но похоже на использование C.

0
ответ дан David Nehme 24 November 2019 в 14:56
поделиться
Другие вопросы по тегам:

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