"sudo crontab -e" aktualisiert /etc/hosts nicht

In meiner Datei /etc/hosts habe ich Datensätze wie diese:

127.0.0.1 www.youtube.com

Damit ich nicht abgelenkt werde. Wenn ich etwas auf einer der von mir blockierten Seiten benötige, füge ich am Anfang der Zeile ein # hinzu. Wenn ich diesen Befehl ausführe, kann ich es so machen, dass alle Zeilen auskommentiert werden können, um den Zugriff wieder zu entfernen:

sudo sed -i '' 's/\#//g' /etc/hosts

Um den Zugriff automatisch zu entfernen, führe ich sudo crontab -ediese Zeile aus und füge sie hinzu

*/10 8-15 * * 1-5 sed -i '' 's/\#//g' /etc/hosts

Ich habe es auch mit probiertsudo crontab -e -u root

Nach dem Speichern bittet der Mac um Erlaubnis für das Terminal, den Computer zu verwalten, was ich erteile, und ich denke, es sollte alles gut sein, aber es sieht nicht, dass der Befehl jemals ausgeführt wird (die Datei wird nicht aktualisiert). Muss ich etwas tun, um die Datei zu aktualisieren?

Welche Version von macOS verwendest du?
Es war ein guter Vorschlag @lx07, hat aber leider nicht funktioniert.

Antworten (1)

Wenn Sie einen Befehl über ausgeben cron, müssen Sie den gesamten Pfad angeben, also sollten Sie stattdessen verwenden /usr/bin/sed.

Es gibt ein paar andere Probleme, die Sie berücksichtigen sollten:

  • cronist veraltet und sollte launchdstattdessen mit ausgeführt werden

  • Warum die Datei an Ort und Stelle bearbeiten? Speichern Sie einfach die Originalversion der Hosts-Datei (dh /etc/hosts.orig) und erstellen Sie eine neue Hosts-Datei, wenn Sie YouTube blockieren möchten (dh /etc/hosts.nodistractions). Kopieren Sie einfach die entsprechende Datei /etc/hostsim angegebenen Zeitintervall nach.

    Zum Beispiel, um alles zu entsperren:

      cp /etc/hosts.orig /etc/hosts
    

    So wechseln Sie in den „Keine-Ablenkung-Modus“:

      cp /etc/hosts.nodistractions /etc/hosts
    

Der Vorteil dieser Methode besteht darin, dass Sie die Datei einfach bearbeiten können, um weitere Hosts hinzuzufügen, wenn sich Ihre Ablenkungen entwickeln, und Sie den Code nicht ändern müssen. Wenn Sie dies als LaunchDameon ausführen, wird dies so ausgeführt root, dass es keine Berechtigungsprobleme gibt, über die Sie sich wirklich Sorgen machen müssen. Sie müssen sich nicht mit sudooder suoder herumschlagen, um sicherzustellen, dass Sie den richtigen Benutzer verwenden.

Allerdings gibt es eine App namens Focus (20 US-Dollar), die über einen sehr umfangreichen Funktionsumfang verfügt, mit dem Sie nicht nur Websites, sondern auch Apps blockieren können. Es gibt eine „Pause machen“-Funktion, mit der Sie die Beschränkungen für einen konfigurierbaren Zeitraum aufheben können, damit Sie eine Pause machen oder, wie Sie beschrieben haben, bei Bedarf etwas bekommen können. Der Preispunkt (IMO) ist ziemlich angemessen für das, was es bietet.

Bitte beachten Sie, dass ich in keiner Weise mit dieser App/Firma verbunden bin und sie auch nicht persönlich verwende. Ich kenne dieses Produkt nur, weil ich ein Tool für Eltern von Schülern finden musste – die sich nicht auf die anstehende Aufgabe konzentrierten – das ihnen die Möglichkeit gab, ihre Ablenkungen automatisch zu verwalten; hauptsächlich aufgrund des Standorts (Eltern bei der Arbeit, Kinder zu Hause, die keine Hausaufgaben machen).

Ich fand sudo launchctl load ... und durch das Ändern der Berechtigungen auf /etc/hosts konnte ich es alle 10 Minuten aktualisieren. Wahrscheinlich könnte man eines davon tun, um es zum Laufen zu bringen. Die Verwendung von cron hat dafür einfach nicht funktioniert, daher scheint launchctl der richtige Weg zu sein.