cron 在终端运行脚本或运行图形应用

Posted armme

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cron 在终端运行脚本或运行图形应用相关的知识,希望对你有一定的参考价值。

需求:利用 cron,让脚本在终端运行,以查看程序输出;或运行图形应用,如 gedit, xclock

cron 运行于非交互 shell,没有附属的终端,也独立于图形桌面。所以,计划任务将运行于后台,然而,我的程序里有很多操作文件描述符的地方,如打开串口,建立 socket,全部出错。我不知道原因,所以想让程序在终端运行,这样还能看到程序输出。那么有没有办法实现上述需求呢?

我首先想到的是 gnome-terminal.

gnome-terminal -x do-job-command

可以实现在打开的终端中执行 do-job-command.

所以我尝试 cron 能不能打开 gnome-terminal,
cron 不是运行于 X.org server 下,因此它不知道必要的环境变量以打开 X.org server 应用,这些环境变量必须被定义。这里我们定义 DISPLAY.
更多 cron 运行 X.org server 应用的说明参考 https://wiki.archlinux.org/index.php/Cron#Running_X.org_server-based_applications
加入计划任务 crontab -e

* * * * * export DISPLAY=:0 && /usr/bin/gnome-termimal
or
* * * * * env DISPLAY=:0 /usr/bin/gnome-termimal

无法打开,mate-terminal, x-terminal-emulator 也打不开,(因为他们不是 X.org server 应用吗)最终确认 xterm 可以。

实现方式 1

所以,计划任务可以是

0 4 * * * env DISPLAY=:0 /usr/bin/xterm -e do-job-command

错误的实现方式 1

利用终端设备文件可以将程序输出到指定终端
tty 查看当前终端
运行级别 3 下是 /dev/tty1-6
运行级别 5 ,或者 ssh 登录,是 /dev/pts/*
我们在终端执行

do-job-command > /dev/pts/17

可以在相应终端看到程序输出,但将其加到 cron ,程序可以输出到终端,但仍然存在打开串口出错等问题。

关于终端与控制台,参考 https://www.cnblogs.com/vk83/archive/2013/06/01/3112700.html

错误的实现方式 2

下面命令也可以打开终端运行命令,

exo-open --launch TerminalEmulator do-job-command

但加到 cron (需设置 DISPLAY),出错:Failed to execute default Terminal Emulator. Input/output error.

以上是关于cron 在终端运行脚本或运行图形应用的主要内容,如果未能解决你的问题,请参考以下文章

python 一个终端代码片段,在mac上生成可启动的usb live CD,以运行类似ubuntu或debian的内容。

从 Cron 作业登录 SQL

如何连续运行 inotifywait 并将其作为 cron 或守护进程运行?

CRON没有执行R脚本文件

在ec2上远程运行命令

在 Heroku 中运行的 Rails 应用程序的脉冲或 cron 作业