Answers:
肮脏的方法可能是将程序的输出重定向到已经存在的终端的pts文件。
要知道pts文件,只需键入tty
命令
~$ tty
/dev/pts/4
那么您的crontab将是:
0 07-17 * * * /home/dat/scripts/cron.out > /dev/pts/4
另一种方法是将程序作为终端的参数启动:
xfce4-terminal --command=/home/dat/scripts/cron.out --display=:0.0 -H
这里display
是你要显示的终端X显示,-H
就是要告诉终止命令后,终端保持开放。每当创建新终端时,都会创建一个。
crontab:
0 07-17 * * * /usr/bin/xfce4-terminal --display=:0.0 -H --command=/home/dat/scripts/cron.out
如果不显示该内容,则系统日志将记录错误。
Cron将您的脚本输出通过电子邮件发送给您。不幸的是,Ubuntu默认不设置本地邮件,这就是为什么Cron在日志中告诉您“未安装MTA,丢弃输出”的原因。
设置本地邮件可能是解决您的问题的一种方法。您会收到一封电子邮件通知,而不是终端中的输出。
如果希望将cron作业输出到终端,则必须将其输出重定向到终端。重定向部分很容易-
0 07-17 * * * /home/dat/scripts/cron.out >/dev/pts/42 2>&1
但是问题是弄清楚重定向到哪个终端。对此没有统一的答案,这取决于您要如何在登录的终端中选择终端。
对于典型用途,GUI通知会更合适。您可以使用notify-send
。您需要设置DISPLAY
环境变量。
0 07-17 * * * DISPLAY=:0 notify-send "$(/home/dat/scripts/cron.out)"
Cron将输出发送到邮件程序。如果要在终端中查看输出,则可以登录到文件并使用tail -f在要查看输出的终端中查看输出
0 07-17 * * * /home/dat/scripts/cron.out > /path/to/log.txt 2> /path/to/error.txt
替代的日志记录方式:
echo output > log.txt
,也可以使用下面描述的包装器脚本。示例程序和包装脚本:
$ cat program.sh wrapper.sh
#!/bin/bash
# sample program
echo "arg 1=$1 arg2=$2 arg3=$3"
echo "sample error" >&2
#!/bin/bash
# sample wrapper
exec ./program.sh "$@" >log.txt 2> error.txt
示例运行1:
$ ./wrapper.sh 1 2 3 ; cat error.txt log.txt
sample error
arg 1=1 arg2=2 arg3=3
示例运行2:
$ ./wrapper.sh "A B C" D E ; cat error.txt log.txt
sample error
arg 1=A B C arg2=D arg3=E
现在,您可以在任何终端中将标准输出和标准错误都记录到文件中了,您可以tail -f
在一个或两个文件上运行,例如tail -f log.txt
or,tail -f log.txt error.txt
这样tail可以监视或宁愿跟随文件进行修改。 尾页
$ tail -f log.txt error.txt
==> log.txt <==
arg 1=1 arg2=2 arg3=3
==> error.txt <==
sample error
随后记录日志文件:
如果以后从程序或其他终端(例如)附加了log.txt或error.txt $ echo "more output" >> log.txt
,则在运行的终端上会看到输出$ tail -f log.txt error.txt
==> log.txt <==
more output
此外,$ echo code red >> error.txt
结果是:
==> error.txt <==
code red