码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-04-23 21:16:33      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:sed   错误   log   控制台   clock   wiki   arch   job   终端   

需求:利用 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 在终端运行脚本或运行图形应用

标签:sed   错误   log   控制台   clock   wiki   arch   job   终端   

原文地址:https://www.cnblogs.com/armme/p/10758652.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!