私が考える最も簡単な方法は、出力をディスクに記録し、コンソール ウィンドウでログファイルが変更されたかどうかを常に確認し、変更を出力することです。
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
あとは、プログラムを出力したいコンソールで実行するだけです。