Как я могу написать работу cron, которая заблокирует мой интернет с 7 вечера до 7 утра? (Так что я могу немного поспать)
Я использую OSX 10.6, и в него встроен cron. Как я могу написать работу cron, которая будет блокировать мой интернет с 7 вечера до 7 утра каждый день?
Я уверен, что это должно быть просто, но я мог найти только один пример в Интернете, и он не работал. Он сказал:
set /etc/hosts.allow file to
be empty
set hosts.deny file to
ALL : ALL
Я сделал это, и Google все еще подошел.
9 ответов
Спасибо, Armardeep, потратив много часов на отладку проблемы с заданием, которое не запускалось из-под root, я смог получить то, что ты сказал, работающее. Вот мои точные шаги:
В терминале введите:
$ sudo crontab -eu root
Затем введите:
0 19 * * * /sbin/ifconfig en0 down > /dev/null
0 7 * * * /sbin/ifconfig en0 up > /dev/null
и это делает это! Спасибо Амардип и Стивенр
Ответ родительского контроля от Алана, вероятно, лучший способ сделать это. Но просто для потомства я опишу, почему попытка ваших хостов не сработала, и опишу решение типа cron.
Hosts.allow (и его аналог hosts.deny) используются для указания хостов, которым разрешен (или запрещен) доступ к вашему компьютеру с помощью определенных сервисов. То, что вы хотите сделать, это наоборот, поэтому это не сработало.
Записи в crontab, которые должны отключиться, а затем снова подключиться к вашей сети, будут выглядеть примерно так:
0 19 * * * /path/ifconfig eth0 down 1> /dev/null
0 7 * * * /path/ifconfig eth0 up 1> /dev/null
Cron реализован по-разному во многих системах *nix, и есть различия в вышеуказанном формате, поэтому обратитесь к странице справки. Извините, я не могу предложить OS X конкретные детали. По соображениям безопасности некоторые реализации cron устанавливают только ограниченные переменные среды при выполнении команды, поэтому вы должны указать полный путь, набрав "which ifconfig" в приглашении оболочки. Вы можете отладить его, удалив перенаправление stdout, и многие хроны должны отправить вам вывод команды по электронной почте, или вы можете просто перенаправить файл журнала.
Я не уверен, как называется сетевое устройство OS X... это может быть что-то отличное от eth0. Просто введите ifconfig, и он должен отображать имена активных устройств. Возможно, вам придется быть пользователем root, чтобы даже запустить ifconfig. Для редактирования файла crontab вам, безусловно, нужно быть пользователем root.
В OS X рассмотрите возможность использования Родительского контроля. Это сделает именно то, что вы ищете.
SelfControl делает именно это. Даже перезагрузка не остановит это.
Добавьте следующее в crontab, чтобы удалить маршрут по умолчанию, который фактически отключит любую связь с Интернетом (но все равно сохранит сетевое подключение).
Чтобы отключить (где abcd - ваш маршрутизатор):
route delete default a.b.c.d
Чтобы снова включить:
route add default a.b.c.d
Зачем использовать cron? Проверьте это приложение, гораздо приятнее и делает гораздо больше: http://getconcentrating.com/
Просто отключите его или выключите, зачем тратить время на поиск решения, которое требует всего 1-2 пальца. Почему это было даже опубликовано лол
На Mac порт Ethernet называется en0, а порт wifi en1.
Вы можете убедиться в этом, перейдя в "Системные настройки" -> "Сеть", затем выбрав "Ethernet", нажав "Дополнительно", а затем перейдя на вкладку "Ethernet" - здесь будет указан MAC-адрес. Сделайте то же самое, но выберите Аэропорт, чтобы получить MAC-адрес порта Wi-Fi.
Затем в терминале введите ifconfig, чтобы получить список сетевых интерфейсов, который покажет вам имя интерфейса для каждого интерфейса (en0, en1 и т. Д.) И загрузку другой информации, включая mac-адрес, который помечен как "ether".
Как только вы узнаете, как называются интерфейсы, вы можете настроить задания cron, чтобы отключить их, как описано Amardeep. - используйте en0 вместо eth0 и повторите для порта wifi.
Вы можете найти Freedom хорошей альтернативой, если вы ленивы. Это стоит 10 долларов США, но это хороший способ сказать хорошо, не отвлекаясь.