2016-03-31 3 views
0

Я использую Daemon для создания демона скрипта python, который у меня есть. Однако кажется, что журналы не записываются в файл. Простой Баш скрипт я использую (с адаптированным форматированием здесь для удобства чтения):«Daemon» на Ubuntu - Ошибка регистрации

if ! daemon --name atlas --running; then 
    daemon --errlog /home/ubuntu/output.log 
    --dbglog /home/ubuntu/output.log 
    --output /home/ubuntu/output.log 
    --stdout /home/ubuntu/output.log 
    --stderr /home/ubuntu/output.log 
    --respawn 
    --name acme 
    /home/ubuntu/acme.py 
fi 

Он успешно запускает сценарий и держит его в живых без проблем. Он также регистрируется, когда сценарий убит, но не регистрирует ни одного из операторов печати в stdout.

Когда скрипт попадает в исключение, кажется, что он сбрасывает все исторические данные журнала, которые должны были распечатываться сразу.

ответ

1

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

Вы увидите что-то в журналах при следующих обстоятельствах:

  • , когда объем данных в выходном буфере достигает некоторого размера и получает покраснел
  • , когда выход закрыт, например, когда процесс завершается.

Вы должны как-то заставить ваш скрипт сбросить выходные данные (например, напечатаны на stdout) раньше. Есть несколько вариантов:

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

Вы найдете ответы на некоторые вопросы и ответы относительно управления выходным буфером. Один из них - Disable output buffering, другой, предлагающий использование unbufferHow to make output of any shell command unbuffered?.

+0

Вы были правы. Как только у него было достаточно данных для обработки, все это сбрасывало. –

Смежные вопросы