「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コマンドの出力をその端末にコピーしようとします。

おすすめ記事