如何编写cron以在新终端中显示脚本输出

时间:2014-08-08 05:02:25

标签: linux shell

您好我想在终端中显示shell脚本的输出,我该怎么做呢,例如 脚本名称showservices.sh包含以下文本


#!/bin/bash

ps -ef

这将显示正在运行的进程。现在我有一个名为firstcron.txt的文件,代码在

下面
* * * * * export DISPLAY=:0; $home/dilip/crontest/showservices.sh

现在把它放在下面的cron中

crontab firstcron.txt

但是它无法在终端中显示脚本的输出。请帮帮我怎样才能做到这一点

1 个答案:

答案 0 :(得分:1)

cron独立于X11,因此无法保证在执行cron作业时X11服务器正在运行。也不能保证不会有多个X11服务器。即使X11正在运行,也无法保证您要与之通话的用户已登录,或者多次登录,可能在多台X11服务器上。换句话说,没有从cron到配置作业的用户的终端的直接映射。此外,cron作业缺少连接到正在运行的X11会话的权限,因为这就是X11的设计方式。

需要此类行为的典型设计是客户端/服务器模型。 cron作业生成服务器进程提供的数据。然后,用户将客户端设置为在连接到所需服务的X11会话上与服务器通信。客户端进程在现有的X11会话中运行,因此它具有打开新窗口并向用户显示信息所需的凭据。

对于您的简单要求,正如评论中所建议的那样,您的cron作业可能只是覆盖特定文件,并且用户可以拥有监控该文件的进程。这是最简单的可以想象的IPC形式。

大多数人都会对单xterm -e tail --follow=name /path/to/file感到满意,但如果你真的希望窗户在你面前跳起来,而你正处于更重要的事情中,那就试试吧。

#!/bin/sh
oldmd5=$(md5sum /path/to/file)
while true; do
    newmd5=$(md5sum /path/to/file)
    case $newmd5 in
        $oldmd5) ;;
        *) xterm -e less /path/to/file & oldmd5=newmd5 ;;
    esac
    sleep 60
done

从您的.xsession或类似内容中运行此内容。

警告:您需要在此处使用某种手刹,或者在周末之后返回时,桌面上可能会有3,000多个xterm窗口。