我制作了一个简单的“日记”程序,它将打开 GUI,提示输入条目和一些因素,并将此信息打印到当前日期下的文件中。我编写了一小段 Java 代码,在运行时执行此操作,我想使用 cron 安排它每天运行。
我还编写了一个小脚本(“javashell.sh”),用于切换到我保存 Java 代码的目录,对其进行编译,然后运行 Java 程序。其内容如下:
/bin/bash #!/bin/bash cd /home/otolithic/桌面/项目; javac 日志.java; Java 日志;
(它太短了,感觉毫无意义,但我认为有必要从 cron 轻松运行该程序;我对 Linux 完全陌生,所以如果这很奇怪,请告诉我)
我将其放在 usr/local/bin 中,这样我只需在终端中输入“javashell.sh”,日志应用程序就可以正常运行。但是,当我尝试使用此命令创建 cronjob 时,我可以在日志中看到它已运行,但没有弹出任何 GUI 来要求输入日志条目,就像我在 cron 之外运行 javashell.sh 时一样。
我已尝试过(分钟/小时/等之后):
导出 DISPLAY=:0 && javashell.sh 显示=:0 javashell.sh env DISPLAY=:0 javashell.sh $DISPLAY=:0 && javashell.sh cd ~/path/to/file && javac Journal.java && java Journal env DISPLAY=:0 && cd ~/path/to/file && javac Journal.java && java Journal
没有效果。
我检查了一下,我的显示器实际上是 :0,所以问题不在于此。那么为什么它不起作用呢?
编辑:也尝试过env DISPLAY=:0 && cd /home/otolithic/Desktop/projects && javac Journal.java && java Journal
答案1
您无法通过 cron 在显示器上打开程序。您希望通过 cron 运行的任何作业都不能要求登录用户会话的任何服务,包括放置 GUI 应用程序的有效显示器。
答案2
crontab 可能使用与您不同的用户。当您说
cd ~/path/to/file
您正在使用 从您自己的用户目录指向该文件~
。您应该使用绝对路径,在您的例子中是这样的:
cd /home/yourusername/path/to/file