两个不同的/ etc / hosts取决于时间


11

我正在尝试为自己准备一套生产力套件。我的第一个目标是将Facebook,Gmail和Stackexchange从0900阻止到1600。

截至目前,我已经编辑了我的文件/etc/hosts,并为Gmail和stackexchange添加了0.0.0.0 www.facebook.com和类似的文件。

但是我对如何在脚本中包含阻塞持续时间感到困惑。

我以为有2个不同的文件(hosts_allow,hosts_block),然后cp hosts_allow hosts或者cp hosts_block hosts根据时间而定,但是随后需要将其置于无限循环中,或者我不太确定这是解决问题的最佳方法。

有什么线索吗?


但是...但是StackExchange可以提高生产力!:(
kba 2012年

@KristianBorupAntonsen,不是,当我尝试学习多变量微积分时:P

1
math.SE总是有帮助的!:)
kba 2012年

Answers:


19

使用cron

crontab -e 以root身份说(或sudo crontab -esudo设置),然后将以下内容放入文本编辑器中出现的文件中:

0  9 * * * cp /etc/hosts_worktime /etc/hosts
0 16 * * * cp /etc/hosts_playtime /etc/hosts

这表示在每月的第9和16小时的第0分钟,/etc/hosts使用给定的shell命令进行覆盖。

您实际上可能想要一些更复杂的东西:

0  9 * * 1-5 cp /etc/hosts_worktime /etc/hosts
0 16 * * 1-5 cp /etc/hosts_playtime /etc/hosts

这一变化(排1-5在第五位)表示,工作时间和娱乐时间之间的变化仅在星期一至星期五发生。

man 5 crontab完整的解释一下您可以在crontab文件中执行的所有操作。

顺便说一下,我更改了hosts上面的文件名,因为hosts_allow太近了hosts.allow,由TCP Wrappers使用


9
+1用于更改文件名以减少tcpwrappers的相似性。另外,我建议ln -f不要使用cp–太容易忘记了,/etc/hosts每天两次要删除的任何更改,而且任何修改过的软件/etc/hosts都不知道。使用ln,您将至少拥有一个永久性的更改副本(无论哪个处于活动状态)。
Alexios 2012年

@Alexios:那里没有争论。
沃伦·扬

3

如果您有2个不同的hosts文件,则只需安排一个cron作业即可/etc在一天中的特定时间覆盖该文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.