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