Crontab исполняемый вывод printf [dубликат]

У меня есть программа, которая печатает какой-то вывод, который я хотел бы всплывать на моем терминале один раз в час в течение рабочего дня.

$ crontab -l 0 07-17 * * * /home/dat/scripts/cron.out

syslog сообщает следующее:

(dat) CMD (/home/dat/scripts/cron.exe) Jun 18 12:02:01 picard CRON[10848]: (CRON) info (No MTA installed, discarding output)

Что мне не хватает?

13
задан 4 June 2014 в 22:35

6 ответов

Cron отправляет вам ваш сценарий. К сожалению, Ubuntu по умолчанию не настроил местную почту, поэтому Cron сообщает вам в журналах «No MTA installed, отбрасывая вывод».

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

Если вы хотите, чтобы ваше задание cron выводилось на терминал, вам нужно Ubuntu не настроить местную почту по умолчанию выводит его на терминал. Часть перенаправления проста -

0 07-17 * * * /home/dat/scripts/cron.out >/dev/pts/42 2>&1

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

Для типичного использования было бы более подходящим уведомление в формате GUI. Вы можете использовать notify-send. Вам нужно MTA .

0 07-17 * * * DISPLAY=:0 notify-send "$(/home/dat/scripts/cron.out)"
5
ответ дан 18 July 2018 в 08:00

Грязным способом может быть перенаправление вывода вашей программы в файл pts уже существующего терминала.

Чтобы узнать файл pts, просто введите команду tty

~$ tty /dev/pts/4

, тогда ваш crontab будет:

0 07-17 * * * /home/dat/scripts/cron.out > /dev/pts/4

. Другим способом может быть запуск программы в качестве аргумента терминала:

xfce4-terminal --command=/home/dat/scripts/cron.out --display=:0.0 -H

, где display - это X, где вы хотите показать терминал, -H означает, чтобы терминал оставался открытым после завершения команды. Это будет создавать каждый раз новый терминал.

crontab:

0 07-17 * * * /usr/bin/xfce4-terminal --display=:0.0 -H --command=/home/dat/scripts/cron.out

, если дисплей отсутствует, у вас будет ошибка, зарегистрированная syslog.

10
ответ дан 18 July 2018 в 08:00

Cron отправляет вывод в почтовую программу. Если вы хотите видеть вывод в терминале, вы можете войти в файл и использовать tail -f для просмотра вывода в терминале, который вы хотите увидеть.

Вход в файл

Самый простой ответ заключается в том, чтобы записывать непосредственно в файл с записью crontab, например:

0 07-17 * * * /home/dat/scripts/cron.out > /path/to/log.txt 2> /path/to/error.txt

Альтернативные способы ведения журнала:

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

Альтернативные способы ведения журнала:

$ cat program.sh wrapper.sh #!/bin/bash # sample program echo "arg 1=$1 arg2=$2 arg3=$3" echo "sample error" >&2 #!/bin/bash # sample wrapper exec ./program.sh "$@" >log.txt 2> error.txt

Пример run 1:

$ ./wrapper.sh 1 2 3 ; cat error.txt log.txt sample error arg 1=1 arg2=2 arg3=3

Пример run 1:

$ ./wrapper.sh "A B C" D E ; cat error.txt log.txt sample error arg 1=A B C arg2=D arg3=E

Войдите в файл

Теперь, когда ваш журнал как стандартная, так и стандартная ошибка файла, в любом терминале, вы можете запустить tail -f в одном или обоих файлах, таких как tail -f log.txt или tail -f log.txt error.txt, чтобы хвост наблюдал или, скорее, следил за файлом (-ами) для поправок. tail_png

$ tail -f log.txt error.txt ==> log.txt <== arg 1=1 arg2=2 arg3=3 ==> error.txt <== sample error

Файлы журналов, добавленные впоследствии:

Если либо файл log.txt, либо файл error.txt позже добавляются либо из вашей программы, либо из другого терминала, например $ echo "more output" >> log.txt , выход отображается на терминале $ tail -f log.txt error.txt

==> log.txt <== more output

Кроме того, $ echo code red >> error.txt приводит к:

==> error.txt <== code red
2
ответ дан 18 July 2018 в 08:00

Cron отправляет вам ваш сценарий. К сожалению, Ubuntu по умолчанию не настроил местную почту, поэтому Cron сообщает вам в журналах «No MTA installed, отбрасывая вывод».

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

Если вы хотите, чтобы ваше задание cron выводилось на терминал, вам нужно Ubuntu не настроить местную почту по умолчанию выводит его на терминал. Часть перенаправления проста -

0 07-17 * * * /home/dat/scripts/cron.out >/dev/pts/42 2>&1

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

Для типичного использования было бы более подходящим уведомление в формате GUI. Вы можете использовать notify-send. Вам нужно MTA .

0 07-17 * * * DISPLAY=:0 notify-send "$(/home/dat/scripts/cron.out)"
5
ответ дан 24 July 2018 в 18:57

Грязным способом может быть перенаправление вывода вашей программы в файл pts уже существующего терминала.

Чтобы узнать файл pts, просто введите команду tty

~$ tty /dev/pts/4

, тогда ваш crontab будет:

0 07-17 * * * /home/dat/scripts/cron.out > /dev/pts/4

. Другим способом может быть запуск программы в качестве аргумента терминала:

xfce4-terminal --command=/home/dat/scripts/cron.out --display=:0.0 -H

, где display - это X, где вы хотите показать терминал, -H означает, чтобы терминал оставался открытым после завершения команды. Это будет создавать каждый раз новый терминал.

crontab:

0 07-17 * * * /usr/bin/xfce4-terminal --display=:0.0 -H --command=/home/dat/scripts/cron.out

, если дисплей отсутствует, у вас будет ошибка, зарегистрированная syslog.

10
ответ дан 24 July 2018 в 18:57

Cron отправляет вывод в почтовую программу. Если вы хотите видеть вывод в терминале, вы можете войти в файл и использовать tail -f для просмотра вывода в терминале, который вы хотите увидеть.

Вход в файл

Самый простой ответ заключается в том, чтобы записывать непосредственно в файл с записью crontab, например:

0 07-17 * * * /home/dat/scripts/cron.out > /path/to/log.txt 2> /path/to/error.txt

Альтернативные способы ведения журнала:

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

Альтернативные способы ведения журнала:

$ cat program.sh wrapper.sh #!/bin/bash # sample program echo "arg 1=$1 arg2=$2 arg3=$3" echo "sample error" >&2 #!/bin/bash # sample wrapper exec ./program.sh "$@" >log.txt 2> error.txt

Пример run 1:

$ ./wrapper.sh 1 2 3 ; cat error.txt log.txt sample error arg 1=1 arg2=2 arg3=3

Пример run 1:

$ ./wrapper.sh "A B C" D E ; cat error.txt log.txt sample error arg 1=A B C arg2=D arg3=E

Войдите в файл

Теперь, когда ваш журнал как стандартная, так и стандартная ошибка файла, в любом терминале, вы можете запустить tail -f в одном или обоих файлах, таких как tail -f log.txt или tail -f log.txt error.txt, чтобы хвост наблюдал или, скорее, следил за файлом (-ами) для поправок. tail_png

$ tail -f log.txt error.txt ==> log.txt <== arg 1=1 arg2=2 arg3=3 ==> error.txt <== sample error

Файлы журналов, добавленные впоследствии:

Если либо файл log.txt, либо файл error.txt позже добавляются либо из вашей программы, либо из другого терминала, например $ echo "more output" >> log.txt , выход отображается на терминале $ tail -f log.txt error.txt

==> log.txt <== more output

Кроме того, $ echo code red >> error.txt приводит к:

==> error.txt <== code red
2
ответ дан 24 July 2018 в 18:57

Другие вопросы по тегам:

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