1

シェル スクリプトを作成しました ( myscript.sh):

#!/bin/sh
ls
pwd

このジョブを 1 分ごとにスケジュールして、コンソールに表示する必要があります。それを行うために、私は次のことを行いましたcrontab -e

*/1 * * * * /root/myscript.sh

/var/mail/rootここでは、コンソールに出力するのではなく、出力をファイルに表示します。

コンソールに出力を表示するには、どのような変更を加える必要がありますか?

4

2 に答える 2

4

私が考える最も簡単な方法は、出力をディスクに記録し、コンソール ウィンドウでログファイルが変更されたかどうかを常に確認し、変更を出力することです。

crontab:

*/1 * * * * /root/myscript.sh | tee -a /path/to/logfile.log

コンソールで:

tail -F /path/to/logfile.log

これに関する問題は、定期的に削除する必要がある、増え続けるログ ファイルを取得することです。

これを回避するには、書き込み先のコンソール pid を特定し、これを事前定義された場所に保存するという、より複雑なことを行う必要があります。

コンソール スクリプト:

#!/usr/bin/env bash

# register.sh script    
# prints parent pid to special file

echo $PPID > /path/to/predfined_location.txt

crontab のラッパースクリプト

#!/usr/bin/env bash

cmd=$1
remote_pid_location=$2

# Read the contents of the file into $remote_pid.
# Hopefully the contents will be the pid of the process that wants the output 
# of the command to be run.
read remote_pid < $remote_pid_location

# if the process still exists and has an open stdin file descriptor
if stat /proc/$remote_pid/fd/0 &>/dev/null
then
    # then run the command echoing it's output to stdout and to the
    # stdin of the remote process
    $cmd | tee /proc/$remote_pid/fd/0 
else
    # otherwise just run the command as normal
    $cmd
fi

crontab の使用法:

*/1 * * * * /root/wrapper_script.sh /root/myscript.sh /path/to/predefined_location.txt

register.shあとは、プログラムを出力したいコンソールで実行するだけです。

于 2012-05-24T08:00:05.060 に答える
3

私はcronジョブの出力をgnome端末に達成しようとしましたが、これで管理しました

*/1 * * * * /root/myscript.sh > /dev/pts/0

GUIがなく、CLIしかない場合は、使用できると思います

*/1 * * * * /root/myscript.sh > /dev/tty1

コンソールにリダイレクトされる crontab ジョブの出力を実現します。ただし、最初に必ず端末の名前を見つけてください。/dev/tty1 またはその他の場合。おそらく次のようなものを使用して、すべてのケースでこれを行う方法がわかりません

env | grep -i tty 
于 2014-11-25T23:19:09.980 に答える