我有一个程序可以打印一些输出,我想在工作日每小时在我的终端上弹出一次。
$ crontab -l
0 07-17 * * * /home/dat/scripts/cron.out
Run Code Online (Sandbox Code Playgroud)
系统日志报告以下内容:
(dat) CMD (/home/dat/scripts/cron.exe)
Jun 18 12:02:01 picard CRON[10848]: (CRON) info (No MTA installed, discarding output)
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
小智 15
肮脏的方法可能是将程序的输出重定向到现有终端的 pts 文件。
要知道 pts 文件,只需键入tty
命令
~$ tty
/dev/pts/4
Run Code Online (Sandbox Code Playgroud)
那么你的 crontab 将是:
0 07-17 * * * /home/dat/scripts/cron.out > /dev/pts/4
Run Code Online (Sandbox Code Playgroud)
另一种方法是将程序作为终端的参数启动:
xfce4-terminal --command=/home/dat/scripts/cron.out --display=:0.0 -H
Run Code Online (Sandbox Code Playgroud)
哪里display
是你要显示终端的X显示,-H
是告诉终端在命令终止后保持打开状态。这将每次创建一个新终端。
定时任务:
0 07-17 * * * /usr/bin/xfce4-terminal --display=:0.0 -H --command=/home/dat/scripts/cron.out
Run Code Online (Sandbox Code Playgroud)
如果显示器不存在,系统日志将记录错误。
Cron 将您的脚本输出通过电子邮件发送给您。不幸的是,Ubuntu 默认不设置本地邮件,这就是 Cron 在日志中告诉你“未安装MTA,丢弃输出”的原因。
设置本地邮件可能是解决问题的一种方法。您会收到一封电子邮件通知,而不是终端中的输出。
如果您希望 cron 作业输出到终端,则必须将其输出重定向到终端。重定向部分很简单——
0 07-17 * * * /home/dat/scripts/cron.out >/dev/pts/42 2>&1
Run Code Online (Sandbox Code Playgroud)
但问题是弄清楚要重定向到哪个终端。对此没有统一的答案,这取决于您希望如何在登录的终端中选择终端。
对于典型用途,GUI 通知会更合适。您可以使用notify-send
. 您需要设置DISPLAY
环境变量。
0 07-17 * * * DISPLAY=:0 notify-send "$(/home/dat/scripts/cron.out)"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
77848 次 |
最近记录: |