Linux crontab:make终端出现警告

时间:2016-04-29 13:05:15

标签: linux

我有一个crontab设置为每晚在特定时间关闭我的电脑。它还会显示警告并允许取消该过程。

我的问题是,如果终端尚未打开,我无法向终端显示警告。我希望终端出现并显示警告并留下取消它的可能性。

我包含了我当前的cron命令。我究竟做错了什么?感谢。

0 3 * * * /sbin/shutdown -r 5 "Shutting down in five minutes..."

1 个答案:

答案 0 :(得分:1)

wall / mesg shutdown使用的广播机制的工作原理 - 它与终端紧密相关,并且不了解图形环境

  1. 另一种方法是创建一个脚本,如果有可用的消息,则生成一个弹出窗口。这需要您在某处分配TTY(查看答案末尾的详细信息。)

  2. 另一方面,恕我直言更好,更简单,替代方案是完全抛弃shutdown消息传递系统,并产生一个类似echo Shutting down in 5 minutes...; sleep 300; shutdown的终端。这种方法的优点是你可以用 Ctrl + C 来取消它。缺点是,根据你如何产生终端,它需要X运行,并会产生一个可能烦人的弹出窗口。

  3. 话虽如此,我相信这个问题更适合SuperUserUnix & Linux SE

    具体wall,由shutdown使用,只循环遍历系统中的所有可写TTY(例如/dev/pts/1)并将字符串写入它们。例如:

      终端A上的
    1. sudo tail -f /dev/tty50
    2. 终端B上的
    3. sudo wall test
    4. 将显示消息test三次:终端B中的一次,终端A中的一次和终端A中的tail中的一次,从TTY50读取(在此示例中,我们需要{{ 1}}将消息广播到我们不拥有的TTY。

      由于桌面上没有打开控制台(=没有TTY),因此没有人可以看到来自sudo的消息。因此,为了按照建议1阅读,您需要在某处保留自己的TTY。我相信文章Allocating Pseudo-Terminals解释了如何以低级方式执行此操作。实现它的另一种方法是监视已经分配的TTY,例如具有超级用户权限的TTY50,尽管我不建议这样做。