Назад | Перейти на главную страницу

Перенаправить вывод из cron в режиме реального времени, а не после завершения программы?

У меня есть сценарий ruby, который пишет в STDOUT, а иногда и в STDERR. Я запускаю этот скрипт каждые 5 минут через crontab:

*/5 * * * * /root/myscript.rb >> /var/log/myscript.log 2>&1

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

Так ли это работает? Есть ли что-то, что я должен искать, чтобы изменить это поведение?

Это Ubuntu 12.04

Ах, я обнаружил, что Ruby не будет автоматически сбрасывать вывод STDOUT / STDERR после каждого вызова записи. я размещен STDOUT.sync = true вверху моего файла, и теперь он записывает в STDOUT и, следовательно, в файл журнала в реальном времени.

Пишите ваш скрипт в syslog вместо stdout. В долгосрочной перспективе это будет гораздо более гибким решением, чем запись в стандартный вывод.