过去N年都上推太多,过去一年总想限制自己上twitter的时间,让工作效率提高起来,但时常看着 rescuetime.com/dashboard 的 social network 类别当日使用时长超过一小时(我给自己定的上推时长阈值),依然停不下看推发推的步伐。。。 最近借着内部和外部多种因素,写了个限制发推时段的脚本,现在把方法和经历总结一下。
要做的是: 限制在制定的时段内,twitter.com不能在电脑上访问,无论客户端还是browser。系统环境是Mac OS X 10.7,随便想了几种方案,决定用crontab加bash script修改/etc/hosts文件中twitter的api/stream/search地址来完成操作。
首先,/etc/hosts 文件中添加如下三行
127.0.0.1 api.twitter.com
127.0.0.1 search.twitter.com
127.0.0.1 stream.twitter.com
这时候twitter就无法访问了。然后写一个bash脚本,根据当前时间,确定在上面的几行内容最前部前添加或者去除注释符号来完成启用或者禁用封锁twitter的功能。脚本blocktwitter.sh内容如下
#!/bin/bash
HOUR=`date "+%H"`
BLOCK=0
if [ "$HOUR" -ge 9 -a "$HOUR" -lt 12 ]; then
BLOCK=1
fi
if [ "$HOUR" -ge 13 -a "$HOUR" -lt 18 ]; then
BLOCK=1
fi
if [ "$BLOCK" -eq 1 ]; then
#echo "block twitter"
sudo sed -i -e \
"s/^#127.0.0.1 \(.*\).twitter.com/127.0.0.1 \1.twitter.com/g" \
/etc/hosts
say "Now blocking twitter"
else
#echo "unblock twitter"
sudo sed -i -e \
"s/^127.0.0.1 \(.*\).twitter.com/#127.0.0.1 \1.twitter.com/g" \
/etc/hosts
say "Now unblocking twitter"
fi
"$HOUR" -ge 13 -a "$HOUR" -lt 18表示如果时钟小时数大于等于13并且小于18,这个可以根据需要进行调节(脚本中的时间是我司上班时段:)最后,使用
sudo crontab -e
命令编辑root用户的定时任务。在编辑器中添加
0 * * * * /bin/bash /Users/username/shell/blocktwitter.sh
行尾一定要有换行/回车。表示每小时的第0分钟执行/Users/username/shell/blocktwitter.sh脚本。这样,每小时检查并根据策略执行一次启用或者禁用twitter域名封锁的禁推脚本就完成了。
注意:最初不知道为何我试验crontab的时候总是执行不到脚本内容;后来经过不知是偶然还是必然的一次修改尝试,我把最后一个定时条件/最后一个星号(*)和执行命令(/bin/bash)之间的空格换成了TAB(制表符/0x09)就一切OK了,后来因为时间所限(其实是懒!)没有查证了,有空和好奇心的童鞋可以探究一下,可以告诉我下结论。还有就是crontab可以(有些是必须)添加SHELL/PATH/MAILTO环境变量,否则有些脚本中的功能会执行不了。
本文中还是有一些说得不够细致,也还有功能不足之处,不过这些细节和补充都是可以google到的,我也是一边google一边写完了这个脚本,不带debug奇怪问题的话也就半个小时就完成了这个功能,大家有什么更多需要更好的主意,尽情地自己扩展吧:)
我推特 https://twitter.com/kcome :)