带有“echo”的 Cron 作业发送电子邮件而不是打印到终端

带有“echo”的 Cron 作业发送电子邮件而不是打印到终端

我是 Unix 新手,正在学习如何安排工作。从一个简单的命令开始,例如

* * * * * echo 'hello'

在 vim 上。然而,我没有在每分钟开始时得到标准输出,而是收到一封/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您的系统上可能还有一个命令。这些天已经不太用了。你可以将你的 cron 作业更改为

* * * * * echo hello | write john

(假设您的用户名是john, write 将尝试查找与您关联的终端并将 echo 命令的输出复制到该终端。

相关内容