2014-01-16 2 views
0

ОС: Ubuntu 10.04 LTSподавить определенный вывод непосредственно в кронтабе

Эй, ребята

использовал скрипт, который делает обновление ежедневно на нашем Ubuntu машине

И хроны Deamon дает уведомление по почте

и все дни приходит следующее: STDIN: не TTY

Эта линия я прокомментирую, и не должны уведомления посланы если эта ошибка occours

Некоторое время назад я нашел способ подавить выход непосредственно в кронтабе

Но не могу найти его больше

ли кто-нибудь konw, как сделать это?

рассматривает John s.

+1

Возможно, вы захотите добавить фактическую запись crontab в свой вопрос, так как это поможет многому определить, какое должно быть перенаправление выходных данных. Скорее всего, вы ищете что-то, что перенаправляет стандартную ошибку на '/ dev/null', что достигается добавлением' 2>/dev/null' в конце команды. –

+0

но мне нужны ошибки Сообщения для уведомлений ... так что я бы только подавил этот вывод: stdin: не является tty ..... я должен знать, что происходит – user3201974

+0

Если вы «должны знать, что происходит», вы необходимо более подробно объяснить вашу проблему. Обновите свой вопрос, чтобы показать нам строку из вашего crontab. Сценарий, выполняемый из cron, не должен начинать читать с 'stdin' в первую очередь; это, вероятно, корень вашей проблемы. –

ответ

1

Ответ на ваш вопрос заключается в следующем:

5 0 * * * your_command 2>&1 | grep -v 'stdin: is not a tty' 

Перенаправить поток ошибок на стандартный вывод, а затем трубы все выходные через grep -v, чтобы удалить эту ненужную ошибку.

Редактировать: Шлепать это, не исследуя дальше, это быстрое и грязное исправление. Сделайте это, если вам просто нужно заставить замолчать эти надоедливые письма и двигаться дальше. Тем не менее, вы можете найти более полезным/полезным в долгосрочной перспективе, чтобы попытаться выяснить, что вызывает ошибку, и остановить ее. Затем, например, если вы добавляете больше заданий cron, вам не нужно будет добавлять это к каждому. В конце концов, вы можете обнаружить, что вам все равно придется это делать, если нелегко исправить команду оскорбителя.

Включение в поисковый запрос предполагает, что это может быть вызвано something in your .bashrc или /root/.profile. Проверьте их и при необходимости исправьте (возможно, сменив mesg -n на tty -s && mesg -n).

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

+0

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

+0

Наверное, но вопрос был именно в том, «как я наматываю этот индикатор на свою приборную панель?» –

+0

Да, и я предлагаю, чтобы хороший ответ указывал, что это плохая идея. Вероятно, ОП является жертвой проблемы [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). –

1

Сообщение об ошибке:

stdin: is not a tty 

предполагает, что что-то в ваших хронах пытается прочитать данные из стандартного ввода. Задание, вызванное cron , не должно делать этого (если, конечно, его стандартный ввод не перенаправлен). Небольшой эксперимент показывает, что стандартный ввод задания cron пуст и не является tty. Если я бег vi как хроны (не пытайтесь повторить это дома), я получаю сообщение об ошибке нечетного по электронной почте, включая эти предупреждения:

Vim: Warning: Output is not to a terminal 
Vim: Warning: Input is not from a terminal 

Таким образом, вы, по-видимому работаете что-то в вашем cron, что (a) предполагает, что он может читать от stdin, и (b) предполагает, что stdin подключен к терминалу, т. е. это какая-то интерактивная команда.

Если вы можете, вы должны отследить, какая команда делает эти предположения, и исправить ее, а не просто отбросить сообщение об ошибке.(Последний напоминает решение проблемы сигнальной лампы на приборной панели вашего автомобиля, накрывая ее лентой.)

Либо не вызывайте интерактивную команду из вашего кронтаба, либо найдите способ сделать любую команду, вызывать запуск в каком-то «пакетном режиме».

С другой стороны, с другой стороны, возможно, что вам необходимо запустить некоторую интерактивную команду из задания cron, и заставить его вести себя правильно слишком сложно. В этом случае вы можете отказаться от сообщения об ошибке, как предлагает Steve Kehlet's answer.

Если у вас есть трудности отслеживания проблемы, несколько полезных трюков:

Test хрон рабочих мест временно работает их каждую минуту:

* * * * * some-command 

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

Вы также можете обновить свой вопрос, чтобы показать нам свою запись crontab и скрипт, который вы используете (если скрипт не слишком велик).

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