我有一个 crontab 设置为每晚在特定时间关闭我的计算机。它还会显示警告并允许取消该过程。
我的问题是,如果终端尚未打开,我无法让它显示带有警告的终端。我希望终端出现并显示警告并保留取消它的可能性。
我包括我当前的 cron 命令。我究竟做错了什么?谢谢。
0 3 * * * /sbin/shutdown -r 5 "Shutting down in five minutes..."
最佳答案
这就是 wall
/mesg
的工作原理,shutdown
使用的广播机制 - 它与终端紧密相关并且不知道关于图形环境。
另一种方法是创建一个脚本,在有可用消息时生成一个弹出窗口。这需要您在某处分配 TTY(查看答案末尾的详细信息。)
另一个,恕我直言,更好更简单的替代方案是完全放弃
shutdown
消息系统,并生成一个终端,它可以执行类似echo Shutting down in 5 minutes...; sleep 300;关机
。这种方法的好处是您只需使用 Ctrl+C 即可取消它。缺点是,根据您生成终端的方式,它需要 X 运行,并且会生成一个可能令人讨厌的弹出窗口。
话虽这么说,我相信这个问题更适合 SuperUser或 Unix & Linux SE .
具体来说wall
,shutdown
使用的只是循环遍历系统中所有可写的TTY(比如/dev/pts/1
) 并向它们写入一个字符串。例如:
- 在终端 A 上,
sudo tail -f/dev/tty50
- 在终端 B 上,
sudo wall test
将显示消息 test
三次:一次在终端 B 中,一次在终端 A 中,一次在终端 A 内的 tail
中,从 TTY50 读取(在此例如,我们需要 sudo
将消息广播到我们不拥有的 TTY。
由于您的桌面上没有打开控制台(= 没有 TTY),因此没有人可以看到来自 wall
的消息。因此,为了按照建议 1 进行阅读,您需要将自己的 TTY 保存在某个地方。相信文章Allocating Pseudo-Terminals解释了如何以低级方式进行操作。实现它的另一种方法是使用 super 用户权限监视已分配的 TTY,例如 TTY50,但我不建议这样做。
关于Linux 定时任务表 : make terminal appear with warning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36939155/