首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cron作业使用“`echo`”发送电子邮件,而不是打印到终端。

Cron作业使用“`echo`”发送电子邮件,而不是打印到终端。
EN

Unix & Linux用户
提问于 2023-03-04 07:02:00
回答 1查看 143关注 0票数 0

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

代码语言:javascript
复制
* * * * * echo 'hello'

在维姆。但是,我并不是在每分钟开始时就得到标准输出,而是在/var/mail/john中接收邮件。其内容如下:

代码语言:javascript
复制
From john@MacBook-Pro-3.local  Fri Mar  3 22:43:00 2023
Return-Path: 
X-Original-To: john
Delivered-To: john@MacBook-Pro-3.local
Received: by MacBook-Pro-3.local (Postfix, from userid 503)
    id 5CD99869153; Fri,  3 Mar 2023 22:43:00 -0800 (PST)
From: john@MacBook-Pro-3.local (Cron Daemon)
To: john@MacBook-Pro-3.local
Subject: Cron  echo 'hello hello'
X-Cron-Env: 
X-Cron-Env: 
X-Cron-Env: 
X-Cron-Env: 
Message-Id: <20230304064300.5CD99869153@MacBook-Pro-3.local>
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作业就可以按预期执行了吗?

EN

回答 1

Unix & Linux用户

发布于 2023-03-04 07:38:44

cron服务正在按设计运行。您已经要求守护进程每分钟运行一条命令。不管您或其他人是否登录,它都会这样做。不管您是否打开了一个或100个终端,它都会这样做。

如果有来自cron作业的任何输出,它会邮寄给您,因为您可能不在附近。

如果您希望在当前终端中的每一分钟都向您发送hello这个词,那么您应该考虑以不同的方式来完成它。一种简单的方法是编写一个无限循环,该循环休眠60秒,然后输出hello。这应该使用&在后台运行。

代码语言:javascript
复制
while true
do
    sleep 60
    echo hello
done &

这并不完美,因为运行回声所需的时间会逐渐增加。它不处理挂起终端输出的情况。然而,它足以满足几乎所有的一切。

您的系统上也可能有一个命令write。这几天用得不多。你可以把你的工作变成

代码语言:javascript
复制
* * * * * echo hello | write john

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

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/738608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档