20121217

Linux shell脚本,Linux下的西红柿时间管理法 IV

Linux shell脚本,Linux下的西红柿时间管理法 IV

续 清理

本来以为三次就写完了,用了几天这两个脚本,发现了一点问题,所以还得再说
两句。希望这次就真的结束了。

我习惯不用计算机的时候,扣上盖,然后机器休眠。这个习惯与上述西红柿时间
管理结合在一起产生了一个问题:at任务还在继续,再唤醒机器的时候,时间管
理还在继续,可能正进行到第5分钟,也可能是第12分钟,而我希望重新计时。

重新计时也很简单,再执行个20.sh就行了。这么做带来的问题是,这个新的时间
管理起始点建立了,旧的却没有清除掉,所以可能过不了几分钟,旧的休息时间
就到了。

清除掉旧的任务也容易。比如执行 atq 显示当前的任务为:

~ $ 20.sh
~ $ atq
3890 Mon Dec 17 21:31:00 2012 r young
3891 Mon Dec 17 21:32:00 2012 r young

3890和3891就是当前的两个任务。清除的命令是:

~ $ atrm 3890; atrm 3891
~ $ atq
~ $

任务果然清理干净了。

但是每一次都要atq,然后去读那两个任务号,然后再atrm,挺麻烦的。所以,有
了下述脚本,用于清理旧的时间管理任务。

代码如下:

1 #!/bin/bash
2
3 task=$(atq -q r | cut -f1 )
4 if [ -z "$task" ]; then
5 echo "No task in queue r."
6 exit 0
7 fi
8
9 for t in $task
10 do
11 atrm $t
12 done

第3行,用atq显示任务列表,然后管道给cut,得到第1列,也就是任务号,看起
来的效果就是:

3890
3891

这些数据赋值给了变量 task。

第9行,遍历数组task,对于其中的每个变量 t ,应用atrm操作,相当于:

atrm 3890
atrm 3891

这样,每当我开机的时候,不必再atq看是否有任务,然后再记住任务号什么的,
只要执行 clear_at.sh,旧的任务就清理掉了。

既往不咎,一切重新开始。

--------------------

博客会手工同步到以下地址:

[http://giftdotyoung.blogspot.com]

[http://blog.csdn.net/younggift]

No comments: