我是Unix的新手,学习如何安排一份工作。从一个简单的命令开始,如
* * * * * echo 'hello'在维姆。但是,我并不是在每分钟开始时就得到标准输出,而是在/var/mail/john中接收邮件。其内容如下:
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作业就可以按预期执行了吗?
发布于 2023-03-04 07:38:44
cron服务正在按设计运行。您已经要求守护进程每分钟运行一条命令。不管您或其他人是否登录,它都会这样做。不管您是否打开了一个或100个终端,它都会这样做。
如果有来自cron作业的任何输出,它会邮寄给您,因为您可能不在附近。
如果您希望在当前终端中的每一分钟都向您发送hello这个词,那么您应该考虑以不同的方式来完成它。一种简单的方法是编写一个无限循环,该循环休眠60秒,然后输出hello。这应该使用&在后台运行。
while true
do
sleep 60
echo hello
done &这并不完美,因为运行回声所需的时间会逐渐增加。它不处理挂起终端输出的情况。然而,它足以满足几乎所有的一切。
您的系统上也可能有一个命令write。这几天用得不多。你可以把你的工作变成
* * * * * echo hello | write john(假设您的用户名是john,write将试图找到与您关联的终端,并将回显命令的输出复制到该终端。
https://unix.stackexchange.com/questions/738608
复制相似问题