习惯使用番茄工作法,在Linux上工作时也需要一个番茄钟。 安装一个Linux下番茄钟工作软件? 其实根本没必要,我们可以用Linux下经典的at命令实现一个简单的番茄钟。

安装AT

一般Linux基本系统里都包含了at这个小巧实用的工具,不需要安装。

不过林子大了,什么鸟都有,比如我最近使用的centOS中居然没有at命令。 于是我安装这个包。

sudo yum install at

你可以用 which at 查看有没有at命令。如果没有,就安装一个。

AT的基本用法

软件准备好了,简单实验一下at的用法。

首先我们要启动atd服务 (freeBSD似乎不需要这一步,而且找不到atd服务)。

# service atd start

如果你没有service命令,你可能需要使用类似下面的命令。

# /etc/init.d/atd start

或许你的系统已经抛弃了initscripts,已经再用systemd了, 你可以用systemd启动服务

# systemctl start atd

服务启动后,我们看看怎么用at添加一个定时任务。

输入 at now+1 minutes 回车, 命令行显示 > ,让你输入要执行的任务。 我们输入 echo "hello world!" 按 control 和 d 结束任务输入。

这样我们就有了一个job. 输入 atq 命令可以查看任务队列。 有任务号和任务将执行的时间。

上面添加的任务表示1分钟后,在终端输出 hello world!

想查看某个任务的详细信息, at -c 任务号.

想删除某个任务, atrm 任务号 或者 at -d 任务号

这个交互式的输入任务的方式比较麻烦,不利于用脚本添加at任务。 怎么办?可以用管道为at指定任务。 上面添加任务的过程可以简化为一行命令

echo "echo 'hello, world!'"|at now+1 minutes

用AT做番茄钟

一个番茄钟是25分钟, 在at命令中使用 now+25 minutes 就能指定25分钟的时间间隔。 当一个番茄钟的时间间隔过去后,用什么方式提醒我们时间到了呢? 我们可以播放一段音乐,显示一个图片,甚至播放一段视频。

好,因为在办公室里使用,播放音乐会干扰别人,我们就采用显示一张图片的方式吧。 显示图片的工具很多。比如 feh,比如 ImageMagick 中的 display。 当然别的还有很多。这里以 feh 为例。

我们可以显示一个美女图片,比如其路径是 ~/pics/girl.png 。 那么我们要执行的任务就是 feh ~/pics/girl.png 。 我们想要25分钟后,显示这个图片,就这样做:

echo 'feh ~/pics/girl.png' | at now+25 minutes

我们可以先把时间间隔设为一分钟,看看效果。

echo 'feh ~/pics/girl.png' | at now+1 minutes

一分钟到了,怎么回事?不显示图片。 atq 查看任务队列,队列也空了,证明任务执行完了。 atq 输出时,告诉我: You have mail in /var/spool/mail/jolly. (其中jolly是我的用户名)。 用 mail 命令查看邮件,内容是:

(feh:2632): Gdk-WARNING **: cannot open display:

display后面是空的,证明feh执行的时候没有指定display。 再加入上述任务:

echo 'feh ~/pics/girl.png' | at now+1 minutes

at -c 任务号 查看它的详细内容。

发现在 'feh' 命令之前,还有很多的环境变量。 但环境变量里不包含 DISPLAY。怪不得找不到display呢。

echo $DISPLAY ,发现DISPLAY的值是 :0.

好,我们在执行feh命令的同时,用 env 指定DISPLAY的值。 再实验一下:

echo 'env DISPLAY=:0 feh ~/pics/girl.png' | at now+1 minutes

一分钟之后,果然开始显示图片了。 成功!

用脚本包装

为了方便,我们写一个脚本, new-clock

#!/bin/sh
echo "env DISPLAY=:0 feh ~/pics/girl.png" |at now+25 minutes

chmod +x new-clock

把new-clock放入执行路径,比如放入 ~/bin 目录下。

cp new-clock ~/bin

这样我们敲入 'new-clock' 命令,就启动了一个番茄钟。 25分钟过后,将显示图片提醒我们。

如果你没有X环境,就不能用显示图片的方式了,可以播放声音来提醒。

2014-04-02

Linux/Unix 下自制番茄钟的更多相关文章

  1. 10分钟 教你学会Linux/Unix下的vi文本编辑器

    10分钟 教你学会Linux/Unix下的vi文本编辑器 vi编辑器是Unix/Linux系统管理员必须学会使用的编辑器.看了不少关于vi的资料,终于得到这个总结.不敢独享,和你们共享. 首先,记住v ...

  2. 【Linux】linux/unix下telnet提示Escape character is '^]'的意义

    在linux/unix下使用telnet hostname port连接上主机后会提示Escape character is '^]' 这个提示的意思是按Ctrl + ] 会呼出telnet的命令行, ...

  3. linux/unix下telnet提示Escape character is '^]'的意义

    在linux/unix下使用telnet hostname port连接上主机后会提示Escape character is '^]' 这个提示的意思是按Ctrl + ] 会呼出telnet的命令行, ...

  4. Linux/UNIX 下 “command not found” 原因分析及解决

    在使用 Linux/UNIX 时,会经常遇到 "command not found" 的错误,就如提示的信息,Linux /UNIX 没有找到该命令.原因无外乎你命令拼写错误或 L ...

  5. Linux/Unix下设置定时任务

    Unix系统提供了cron和at命令,使系统和用户可以定时运行一定的程序,而不需手工启动. 使用cron用于周期性的执行一个命令,为了使用它,必须编辑crontab文件.系统缺省的/etc/cront ...

  6. 教你学会Linux/Unix下的vi文本编辑器

    vi编辑器是Unix/Linux系统管理员必须学会使用的编辑器.看了不少关于vi的资料,终于得到这个总结. 首先,记住vi编辑器的两个模式:1.命令模式 2.编辑模式. 在一个UNIX/Linux的s ...

  7. linux/Unix下的vim/vi指令的使用方法

    概述 以下这篇文章介绍的是关于vim的使用方法,由于我本身对linux没有太多的研究,写下的这篇文章纯属是在实际中经常使用vim指令,想通过这篇文章记录下来,方便以后使用时查找方便.个人认为,对于普通 ...

  8. Mac下SVN服务器环境的搭建和配置(除展示图片外,所有命令在Linux/Unix下适用)

    这几天领导没有安排工作,闲着没事就想把自己这两年做iOS开发时感觉知识有欠缺的地方想好好深入地补习一下,昨天和今天就计划好好学习下SVN和git的从创建和到原理,到命令,到界面的使用.一不小心被另一领 ...

  9. 转:LINUX/UNIX下的回车换行与WINDOWS下的区别

      今天,我总算搞清楚“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别了.在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 3 ...

随机推荐

  1. Prism6下的MEF:第一个Hello World

    最近看书比较多,正好对过去几年的软件开发做个总结.写这个的初衷只是为了简单的做一些记录. 前言 复杂的应用程序总是面临很多的页面之间的数据交互,怎样创建松耦合的程序一直是多数工程师所思考的问题.诸如依 ...

  2. WindowsXP开机就打开数字小键盘的几种方法

    很多人WindowsXP登陆界面输入密码时,都要使用数字键盘,可是很多时候下都会出现小键盘灯不亮情况,非要每次都按一 下才行,是不是很麻烦呢?下面就把全面的解决方法告诉大家. 用户名和密码时,不要输入 ...

  3. [日常工作] SQLSERVER 数据库出问题..搜索到的有用的网页信息

    Finding a table name from a page ID By: Paul Randal Posted on: September 25, 2014 1:42 am   (Check o ...

  4. Android 开发工具下载中文网站

    Android官方网站(develop.android.com)因为被墙而无法访问.这时可以访问中文网址: http://wear.techbrood.com/ SDK Manager 代理及安装文件 ...

  5. React之智能组件和木偶组件

    智能组件 VS 木偶组件 在 React + Redux 结合作为前端框架的时候,提出了一个将组件分为“智能”和“木偶”两种 智能组件:它是数据的所有者,它拥有数据.且拥有操作数据的action,但是 ...

  6. Spring Boot 学习笔记1---初体验之3分钟启动你的Web应用

    前言 早在去年就简单的使用了一下Spring Boot,当时就被其便捷的功能所震惊.但是那是也没有深入的研究,随着其在业界被应用的越来越广泛,因此决定好好地深入学习一下,将自己的学习心得在此记录,本文 ...

  7. python中OS模块操作文件和目录

    在python中执行和操作目录和文件的操作是通过内置的python OS模块封装的函数实现的. 首先导入模块,并查看操作系统的类型: >>> import os os.name # ...

  8. hbase batch批处理

    hbase的put(List<Put> puts),delete(List<Delete> deletes),get(List<Get> gets)都是基于batc ...

  9. 初探Java 9 的的模块化

    Java 9中最重要的功能,毫无疑问就是模块化(Module),它将自己长期依赖JRE的结构,转变成以Module为基础的组件,当然这在使用Java 9 开发也和以前有着很大的不同. Java8或更加 ...

  10. Luogu 3385 负环 | 我有特别的SPFA技巧

    这样似乎跑得快: 初始化所有的dis是0,然后枚举每个点作为起点,用DFS更新所有点的dis: 如果更新到一个栈中节点,那么有负环. #include <cstdio> #include ...