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的内容。