cron 작업은 /dev/stdout으로 인쇄됩니다.

cron 작업은 /dev/stdout으로 인쇄됩니다.

/dev/stdout에 출력을 인쇄하는 작업을 설정하고 싶지만 cron이 이를 가로채서 이메일을 보내고 있습니다.

crontab -l
*/1 * * * * echo "hiccup" >> /dev/stdout 2>&1

메시지는 다음과 같습니다.

21   │ From [email protected]  Tue May 21 11:13:00 2019
22   │ Return-Path: <[email protected]>
23   │ X-Original-To: xxx
24   │ Delivered-To: [email protected]
25   │ Received: by ltus423288.na.yyy.com (Postfix, from userid 501)
26   │     id EE6752E98EF; Tue, 21 May 2019 11:13:00 +0200 (CEST)
27   │ From: [email protected] (Cron Daemon)
28   │ To: [email protected]
29   │ Subject: Cron <xxx@ltus423288> echo "hiccup" >> /dev/stdout 2>&1
30   │ X-Cron-Env: <SHELL=/bin/sh>
31   │ X-Cron-Env: <PATH=/usr/bin:/bin>
32   │ X-Cron-Env: <LOGNAME=xxx>
33   │ X-Cron-Env: <USER=xxx>
34   │ X-Cron-Env: <HOME=/Users/xxx>
35   │ Message-Id: <[email protected]>
36   │ Date: Tue, 21 May 2019 11:13:00 +0200 (CEST)
37   │ Status: O
38   │
39   │ hiccup

나는 stdout에서 모든 것을 가져오도록 Fluidd를 구성했으므로 cron을 사용하여 작업 로그를 거기로 보내는 것을 선호합니다. /dev/stdout에 있는 심볼릭 링크 파일에 쓰려고 했지만 작동하지 않았습니다. 메일 보내기를 비활성화하고 cron에게 /var/log/syslog에 쓰도록 명령하면(그리고 /dev/stdout에 대한 심볼릭 링크로 만들면) cron이 무한 루프에 빠지게 됩니다.

답변1

cron의 목적은 터미널 없이 명령을 실행하는 것입니다. 이는 터미널이 표준 출력으로 인쇄할 수 없음을 의미합니다. 그렇기 때문에 메일로 보냈습니다.

출력을 삭제할 수 있습니다.

*/1 * * * * echo "hiccup" >> /dev/null 2>&1

작업의 표준 출력을 프로그램으로 파이프할 수 있습니다. 예를 들어 loggersyslog 데몬으로 보낼 수 있습니다.

*/1 * * * * echo "hiccup" | logger -t mycronjob 2>&1

또는 파일로 리디렉션합니다.

*/1 * * * * echo "hiccup" >> /var/tmp/some_file 2>&1

하지만 간단한 것도 있어요터미널 없음cron 작업은 표준 출력을 다음으로 보낼 수 있습니다.

답변2

cron"헤드리스" 작업이 가능하므로 /dev/stdout(그리고 당신 echo이 생각하는 모든 것이 말이 되지 않습니다). 이것이 메시지를 캡처하여 메일을 보내는 이유입니다.

그러나 다른 소프트웨어에서 사용하기 위해 일반 파일에 쓰도록 지시할 수는 있습니다. 당신은 이것을 할 수 있습니다출력 리디렉션(실행 명령 이후 > somefile또는 >> somefile이후) 허용된 답변의 예에 표시된 대로:

*/1 * * * * echo "hiccup" >> /var/tmp/some_file 2>&1

관련 정보