如何使用 cron 创建夜间模式

如何使用 cron 创建夜间模式

我在晚上使用 Iris Mini 过滤蓝光,效果很好,但必须手动执行它很烦人。所以我尝试使用 cron 在每晚 8 点启动它。

这是我写的执行 crontab -e 的内容。如果我在终端中执行该命令,则该命令有效

定时任务

0 20 * * * sh /home/jogarcia/Software/open-iris-mini.sh

打开 iris-mini.sh

#!/bin/bash

export DISPLAY=0:.
/home/jogarcia/Software/iris-mini

我还执行了xhost +localhost 测试(在 cron 选项卡之前)。

在日志中搜索grep CRON /var/log/syslog我发现这几行似乎表明实际上已执行:

计划日志

Nov  2 20:00:01 my-computer-is-name CRON[8391]: (user) CMD (sh /home/jogarcia/Software/open-iris-mini.sh)

但它不起作用,因为我在屏幕上看不到结果(它应该显示一种橙色),我真的迷失了,我不知道做错了什么。

为了查看错误,我安装了邮件服务。

本地邮件错误

QXcbConnection: Could not connect to display 0:.

答案1

秘密(正如@指出的瓦尔特纳就是正确设置DISPLAY。

那大概应该是DISPLAY=:0

格式通常为主机名:显示编号,其中主机名是可选的。

第二个问题是显示安全。如果您将 cronjob 放在您自己的 crontab 中而不是 root 的 crontab 中,那么xhost就不需要它了xauth。 OP(可能)通过使用crontab -eas 自己正确地做到了这一点。 (请注意,$HOME必须正确才能xauth保证安全性。这是将其放入您自己的 crontab 中的一部分。)

这里的另一个技巧是安装电子邮件系统来获取错误消息。

当 OP 报告(安装电子邮件系统后)“cron 作业无法连接到显示器”时,这可能意味着 DISPLAY 不正确或显示安全性出现问题(xauthxhost)。为此,我建议尝试在命令窗口中运行脚本。尝试像这样运行它env -uDISPLAY /home/jose/Software/open-iris-mini.sh(如果它说该文件不可执行,请使用chmod +x

(根据OP的要求添加答案。)

答案2

这会失败,因为cron作业在它们自己的上下文中运行,而不是在 GUI 上下文中(在 GUI 上下文中控制颜色“有意义”)。

为了让它发挥作用,有两个步骤

在您的脚本中,添加环境变量的定义DISPLAY(用作指向 X 服务器的指针)。就像是

export DISPLAY=0:.

但请检查echo "$DISPLAY"您的 GUI 上下文。

在你的 GUI 启动中(也许在$HOME/.config/autostart

xhost +localhost

告诉 X 服务器接受来自主机localhost(或用户 ID localhost——X Windows 安全性很奇怪)的连接。您必须在每次 GUI 登录时执行此操作。

man xhost X

答案3

这正是使用在我之前回答的人的答案对我有用的方法

用于crontab -ecron 作业

[email protected]
0 20 * * * sh /home/jogarcia/Software/open-iris-mini.sh

然后在sh文件上:

#!/bin/bash

DISPLAY=:0 /home/jogarcia/Software/iris-mini

为了查看它是否按预期工作,我使用了以下命令:

env -uDISPLAY /home/jogarcia/Software/open-iris-mini.sh 

为了查看 cron 日志,我安装了 postfix sudo apt-get install postfix,全部是本地的。

相关内容