"echo"를 사용한 크론 작업은 터미널에 인쇄하는 대신 이메일을 보냅니다.

"echo"를 사용한 크론 작업은 터미널에 인쇄하는 대신 이메일을 보냅니다.

저는 Unix를 처음 접했고 작업을 구성하는 방법을 배우고 있습니다. 다음과 같은 간단한 명령으로 시작하세요.

* * * * * echo 'hello'

vim에서. 그러나 매 분마다 stdout을 가져오는 대신 /var/mail/john프로세스는 다음과 같습니다.

From [email protected]  Fri Mar  3 22:43:00 2023
Return-Path: <[email protected]>
X-Original-To: john
Delivered-To: [email protected]
Received: by MacBook-Pro-3.local (Postfix, from userid 503)
    id 5CD99869153; Fri,  3 Mar 2023 22:43:00 -0800 (PST)
From: [email protected] (Cron Daemon)
To: [email protected]
Subject: Cron <john@MacBook-Pro-3> echo 'hello hello'
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=john>
X-Cron-Env: <USER=john>
Message-Id: <[email protected]>
Date: Fri,  3 Mar 2023 22:43:00 -0800 (PST)

hello hello

MacBook-Pro-3:~ john$ 
You have new mail in /var/mail/john
MacBook-Pro-3:~ john$ 

cron 작업이 예상대로 실행될 수 있도록 이것을 설명할 수 있는 사람이 있나요?

답변1

서비스 cron가 설계된 대로 작동하고 있습니다. 매분마다 명령을 실행하도록 데몬에 요청했습니다. 이는 귀하 또는 다른 사람의 로그인 여부에 관계없이 수행됩니다. 터미널이 하나 열려 있든, 수백 개가 열려 있든 관계없이 이 작업을 수행합니다.

cron 작업의 출력이 있는 경우 귀하가 주변에 없을 수 있으므로 해당 결과가 귀하에게 메일로 전송됩니다.

현재 터미널에서 매분마다 "hello"라는 단어를 받으려면 다른 접근 방식을 고려해야 합니다. 간단한 접근 방식은 60초 동안 휴면한 다음 hello를 인쇄하는 무한 루프를 작성하는 것입니다. 이 작업은 백그라운드에서 실행되어야 합니다.&

while true
do
    sleep 60
    echo hello
done &

에코를 실행하는 데 필요한 시간이 점차 증가하므로 완벽하지는 않습니다. 터미널 출력을 일시정지한 경우에는 처리하지 않습니다. 그러나 거의 모든 것에 충분합니다.

write시스템에 명령이 있을 수도 있습니다. 요즘에는 많이 사용되지 않습니다. 크론 작업을 다음으로 변경할 수 있습니다.

* * * * * echo hello | write john

(귀하의 사용자 이름이 write 라고 가정하면 john, 귀하와 연관된 터미널을 찾고 echo 명령의 출력을 해당 터미널에 복사하려고 시도합니다.

관련 정보