Cron Bashスクリプト - /var/spool/mail/rootの代わりに現在の端末にエコーされます。

Cron Bashスクリプト - /var/spool/mail/rootの代わりに現在の端末にエコーされます。

Cron Bashスクリプトは/var/spool/mail/rootの代わりに現在のセッション端末にエコーできますか?

ログファイルにエラーを記録するスクリプトがありますが、補足/重要ではない情報が端末に反映されます。

cron から root でスクリプトを実行すると、メッセージは端末ではなく /var/spool/mail/root にリダイレクトされます。

ストレージの代わりにrootまたは他のユーザーがログインしている場合は、端末に表示するようにしたいと思います。誰もログインしていないときにこれらのメッセージが消えても大丈夫です。 Cisco IOS と同様

ベストアンサー1

で実行すると、「現在の端末」はありませんcron

デフォルトでは、cronジョブ出力を含む電子メールが送信されます。ローカルメールサブシステムはそれをファイルに転送します。このファイルは、またはお気に入りのローカル電子メールクライアントを/var/spool/mail/$USER使用して読み取ることができます。mailmailx

cron次のように、ジョブの出力をホームディレクトリのファイルに書き込むことができない特別な理由はありません。

* * * * *    date >$HOME/.current_date 2>&1

GUIを実行している場合は、GUIを使用してnotify-send画面のポップアップにメッセージを書き込むことができます。しかし、それを作成するのは簡単ではありませんcron。一つある探すStackExchange周辺解決策このサブ質問に。

ttyに書きたい場合は、実際に同じものを使用できますecho hello, world >/dev/tty1。書き込み前に実際に正しいアカウントにログインしていることを確認したい場合があります/dev/tty1(これはデバイスの所有権を確認することで行うことができますstat -c %U /dev/tty1)。

#!/bin/bash
#
me=roaima    # userid to write messages to

log()
{
    local tty owner
    for tty in $( who | awk -v me="$me" '$1 == me {print $2}' )
    do
        owner="$( stat -c %U "/dev/$tty" 2>/dev/null )"
        [[ "$me" = "$owner" ]] && echo "$@" >"/dev/$tty"
    done
}

# ...

log "hello, world"
log "this is a message for you to read RIGHT NOW"
exit 0

ただし、このコマンドを使用することをお勧めしますwrite。たとえば、ログイン端末に「roaima」ユーザーを書き込むには、次のようにします。

* * * * *    echo hello from cron | write roaima >/dev/null 2>&1

おすすめ記事