Linux 定时任务表 : make terminal appear with warning

标签 linux

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

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

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

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

最佳答案

这就是 wall/mesg 的工作原理,shutdown 使用的广播机制 - 它与终端紧密相关并且不知道关于图形环境。

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

  2. 另一个,恕我直言,更好更简单的替代方案是完全放弃 shutdown 消息系统,并生成一个终端,它可以执行类似 echo Shutting down in 5 minutes...; sleep 300;关机。这种方法的好处是您只需使用 Ctrl+C 即可取消它。缺点是,根据您生成终端的方式,它需要 X 运行,并且会生成一个可能令人讨厌的弹出窗口。

话虽这么说,我相信这个问题更适合 SuperUserUnix & Linux SE .


具体来说wallshutdown使用的只是循环遍历系统中所有可写的TTY(比如/dev/pts/1 ) 并向它们写入一个字符串。例如:

  1. 在终端 A 上,sudo tail -f/dev/tty50
  2. 在终端 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/

相关文章:

c++ - 来自 EPEL 的 Amazon Linux 上的 Clang 无法找到 C++ header 或库

linux - Shell 命令检查文件是否有今天的日期

linux - 使用 fork 的父子进程

linux - 在 Raspberry PI 3 上安装 OpenALPR 时出错

linux - 在 Shell 脚本中读取 CSV 文件,直到没有标题的行尾

linux - 如何将 Windows Identity 从 Angular 应用程序传递到托管在 Linux 服务器上的 asp.net core 2.0 webapi

linux - 如何使用 Python(独立于操作系统)获取 pid 列表和 PID 信息?

linux - 如何对目录中的所有文件执行grep操作?

mysql - 我无法调试 shell 脚本中的简单错误

windows - HID 软件设备(仿真)