“at”命令可以执行任何类型的 shell 脚本吗?

“at”命令可以执行任何类型的 shell 脚本吗?

我创建了一个显示消息对话框的 java 程序。按确定后关闭,程序执行结束。

然后我创建了一个alarm.sh执行该程序的 shell 脚本。我测试了它并且它有效:

$ alarm.sh "-i It's time to ring up the revenue service"

但是当我执行时:

$ echo "alarm.sh \"-i It's time to ring up the revenue service\"" | at 15:00

尽管已安排作业,但消息对话框在 15:00 并未弹出。为什么? “at”如何执行shell脚本以及它有什么限制?

答案1

不可以,at只能运行非交互式脚本。

这些脚本将在不附加到启动at命令的终端的情况下运行。如果程序在其stdout和/或stderr流程中输出某些内容,则该输出将通过邮件发送给您。

启动脚本时,某些变量不会保留,特别是DISPLAY,这就是您尝试失败的原因。您可以查看您的邮件,看看是否报告了错误。如果没有,sendmail或者类似的可能没有安装/配置。

如果你想在命令运行时使用当前的 X11 显示,你可以这样设置:

echo "DISPLAY=$DISPLAY alarm.sh \"-i It's time to ring up the revenue service\"" | at 15:00

答案2

at可能没有您当前的工作目录它是工作目录。指定完整路径alarm.sh

echo "/path/to/alarm.sh '-i There is no alarm; only Zuul'" | at 15:00

相关内容