我是 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 命令的输出复制到该终端。