2016-04-06 2 views
9

У меня есть задание cron, и его вывод теперь перенаправлен в файл. Это выглядит следующим образомКак перенаправить вывод задания cron в stdout

0 9 * * * /bin/sh /bin/cleanup.sh > /home/darkknight/cleanup.log

Может ли один помочь мне rediect его выход на стандартный вывод?

+4

Возможный дубликат [как перенаправить полный вывод скрипта] (http://stackoverflow.com/questions/1887618/how-to-redirect-complete-output-of-a-script) – Bhavesh

+0

HTTP : //unix.stackexchange.com/questions/52330/how-to-redirect-output-to-a-file-from-within-cron – Bhavesh

+0

'cron' работает в фоновом режиме оболочки, поэтому к' stdout 'вы хотите перенаправить выход? –

ответ

1

Введите tty на любом терминале, и мы получим файл устройства для этого конкретного временного окна, например /dev/pts/1. Переустановить задание cron в этот файл как cleanup.sh > /dev/pts/1

+0

Это tty станет недействительным (закрытым и, возможно, позже повторно используемым), когда вы выйдете из системы или выйдете из текущей оболочки. –

1

Запустите cat /home/darkknight/cleanup.log, после чего вы получите выход на STDOUT. Если вы не можете увидеть, что вы ожидаете в качестве выхода, возможно, вам необходимо изменить хроны следующим образом:

0 9 * * * /bin/sh /bin/cleanup.sh > /home/darkknight/cleanup.log 2>&1

Чтобы получить то, что cleanup.sh пишет на своей STDERR.

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

0 9 * * * /bin/sh /bin/cleanup.sh >> /home/darkknight/cleanup.log 2>&1

Или просто выполнить /bin/sh /bin/cleanup.sh тогда вы получите как STDOUT и STDERR на вашем терминале.

13

Запуск процесса имеет PID, а его fd (дескриптор файла) отображается на /proc/<PID>/fd. И мы можем найти PID работающего процесса cron на /var/run/crond.pid.

Чтобы отправить журнал cron в stdout, мы можем написать журнал для fd номер 1 процесса, запускаемого cron.

0 9 * * * /bin/sh /bin/cleanup.sh > /proc/$(cat /var/run/crond.pid)/fd/1 2>&1 
+0

Как это полезно? Например, в моей системе stdout и stderr процесса '/ usr/bin/cron' направляются в сокеты. –

+3

@KeithThompson. Мой сценарий заключается в том, что я использую контейнер докеров, выполняющий службу cron (используйте 'cron -f' make cron, работающий на переднем плане), и так как я хочу собирать журналы для мониторинга и аналитики. Согласно 12-фактору app - «Обработать журналы как потоки событий», поэтому я перенаправляю журнал cron на stdout. – gaga5lala

+0

Действительно ли это работает? Можете ли вы получить доступ к данным, записанным в эти сокеты? –