터미널에서 cron 작업으로부터 출력 받기


15

근무 시간 동안 매시간마다 터미널에 팝업으로 출력하고 싶은 출력물을 인쇄하는 프로그램이 있습니다.

$ 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)

내가 무엇을 놓치고 있습니까?


cron 작업은 터미널에 쓰지 않아야합니다. 사용 가능한 것이 없을 수 있습니다.
guntbert

답변:


14

더러운 방법은 프로그램 출력을 기존 터미널 의 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는 명령이 종료 된 후 터미널이 열린 상태를 유지하도록 지시하는 것입니다. 이것은 새로운 터미널을 만들 때마다 만들어집니다.

크론 탭 :

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

디스플레이가 없으면 syslog에 의해 오류가 기록됩니다.


6

Cron에서 스크립트 출력을 이메일로 보냅니다. 불행히도 우분투는 기본적으로 로컬 메일을 설정하지 않기 때문에 Cron이“No MTA installed, 버리기 출력” 로그에 표시합니다 .

로컬 메일을 설정하면 문제를 해결할 수 있습니다. 터미널에서 출력하는 대신 이메일 알림을받습니다.

cron 작업을 터미널로 출력하려면 출력을 터미널로 경로 재지 정해야 합니다. 리디렉션 부분은 쉽습니다.

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

그러나 문제는 리디렉션 할 터미널을 찾는 것입니다. 그것에 대한 보편적 인 대답은 없으며, 로그인 한 터미널 중에서 터미널을 선택하는 방법에 따라 다릅니다.

일반적인 용도의 경우 GUI 알림이 더 적합합니다. 사용할 수 있습니다 notify-send. 환경 변수설정DISPLAY 해야 합니다 .

0 07-17 * * * DISPLAY=:0 notify-send "$(/home/dat/scripts/cron.out)"

2

Cron은 메일러에게 출력을 보냅니다. 터미널에서 출력을 보려면 파일에 로그인하고 tail -f를 사용하여 출력을 보려는 터미널에서 출력을 볼 수 있습니다


파일에 기록

  • 가장 간단한 대답은 다음과 같은 crontab 항목을 사용하여 파일에 직접 기록하는 것입니다.

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

대체 방법 :

  • 프로그램이 쓸 수있는 스크립 인 경우 출력을 로그 파일로 리디렉션하도록 프로그램을 수정할 수 있습니다. echo output > log.txt또는 아래 설명 된 래퍼 스크립트를 사용할 수 있습니다 .
  • 프로그램이 바이너리이거나 쓰기 불가능한 경우, 출력을 파일로 캡처하기 위해 랩퍼 스크립트를 작성해야 합니다.

예제 프로그램 및 랩퍼 스크립트 :

$ 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

예제 실행 1 :

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

예제 실행 2 :

$ ./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 -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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.