Dua berbeda / etc / hosts tergantung pada waktu

11

Saya mencoba membuat rangkaian produktivitas untuk diri saya sendiri. Tujuan pertama saya adalah memblokir Facebook, Gmail dan Stackexchange dari 0900 hingga 1600.

Sampai sekarang, saya telah mengedit /etc/hostsdan menambahkan 0,0.0.0 www.facebook.com dan yang serupa untuk gmail dan stackexchange.

Tapi saya agak bingung tentang cara memasukkan durasi pemblokiran dalam skrip saya.

Apa yang saya pikir memiliki 2 file berbeda (hosts_allow, hosts_block) dan kemudian cp hosts_allow hostsatau cp hosts_block hoststergantung pada waktu tetapi kemudian ini perlu dimasukkan ke dalam loop tak terbatas atau sesuatu yang saya tidak benar-benar yakin adalah cara terbaik untuk mendekati masalah.

Ada petunjuk?

Ulrich Dangel
sumber
Tapi ... Tapi StackExchange meningkatkan produktivitas! :(
kba
@KristianBorupAntonsen, bukan ketika saya mencoba untuk belajar Kalkulus Multivariabel: P
1
math.SE selalu membantu! :)
kba

Jawaban:

19

Gunakan cron.

Katakan crontab -e sebagai root - atau sudo crontab -ejika Anda telah sudomengatur - dan letakkan yang berikut di file yang muncul di editor teks:

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

Ini mengatakan bahwa pada menit nol dari jam ke-9 dan ke-16 setiap hari dalam sebulan, timpa /etc/hostsmenggunakan perintah shell yang diberikan.

Anda mungkin sebenarnya menginginkan sesuatu yang sedikit lebih rumit:

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

Satu perubahan itu - menempatkan 1-5di posisi kelima - mengatakan perubahan antara kerja dan waktu bermain hanya terjadi pada hari Senin hingga Jumat.

Katakan man 5 crontabuntuk mendapatkan penjelasan lengkap tentang apa yang dapat Anda lakukan dalam crontabfile.

Omong-omong, saya mengubah nama hostsfile Anda di atas, karena hosts_allowterlalu dekat dengan hosts.allow, digunakan oleh TCP Wrappers .

Warren Young
sumber
9
+1 untuk mengubah nama file untuk mengurangi kesamaan tcpwrappers. Juga, saya sarankan ln -f, tidak cp- terlalu mudah untuk melupakan bahwa setiap perubahan untuk /etc/hostsdihapus dua kali sehari, dan setiap perangkat lunak yang memodifikasi /etc/hoststidak akan tahu. Dengan ln, Anda setidaknya akan memiliki satu salinan perubahan yang tetap (mana saja yang aktif).
Alexios
@Alexios: Tidak ada argumen di sana.
Warren Young
3

Jika Anda memiliki 2 hostsfile berbeda , Anda cukup menjadwalkan pekerjaan cron untuk menimpa file /etcpada jam tertentu di siang hari.

R ..
sumber