Ich bin nur neugierig: Was kann der Zweck sein, alle 30 Minuten neu zu starten?
Rafał Cieślak
Antworten:
30
Der beste Weg, dies zu tun, hängt davon ab, warum Ubuntu jede halbe Stunde neu gestartet werden soll.
Ich empfehle daher, Ihre Frage zu bearbeiten, um zu erklären, warum Sie dies tun möchten.
Neustart alle 30 Minuten und Warnung der Benutzer vor jedem Neustart:
Unter der Annahme, dass Benutzer den Computer lokal oder remote verwenden, ist es am besten, Ubuntu nicht ohne Vorwarnung von unten neu zu starten. Anstatt den rebootBefehl zu planen , empfehle ich daher, den shutdownBefehl so zu planen, dass der Benutzer gewarnt wird.
Fügen Sie Folgendes hinzu, um alle halbe Stunde mit einer Warnung 5 Minuten vorher ein Herunterfahren zu planen /etc/crontab:
Sie müssen die erste Zeile, die ein Kommentar ist, nicht hinzufügen. Ich habe es aus Gründen der Klarheit eingefügt - so etwas gibt es bereits.
Dadurch wird das System -rfünf Minuten nach Ausführung +5des Befehls für einen Neustart ( ) heruntergefahren . Es läuft jede halbe Stunde ( */30). Siehe man cronund man 5 crontab.
Wechseln Sie +5zu etwas anderem, um zu ändern, wie lange Benutzer nach einer Warnung vor einem Neustart noch Zeit haben.
0,30under minute funktioniert auch, wenn Sie das vorziehen. (Ebenso, wenn es alle 20 Minuten wäre, könnten Sie schreiben */20oder 0,20,40.)
Vergewissern Sie sich, dass /sbindie PATHVariable oben in angegeben ist /etc/crontab. Andernfalls muss shutdown(unter command) als aufgerufen werden /sbin/shutdown.
Der Befehl wird immer zur halben Stunde ausgeführt, wenn die Maschine zu diesem Zeitpunkt in Betrieb ist . Dadurch werden die Abschaltungen alle halbe Stunde angekündigt und um 5 Minuten und 35 Minuten nach der vollen Stunde ausgeführt.
Ein Vorteil hierbei ist, dass ein Administrator das gerade angekündigte Herunterfahren mit abbrechen kann sudo shutdown -c.
Wenn der Computer während der festgelegten Zeiten, zu denen der geplante Befehl ausgeführt werden soll, heruntergefahren ist, wird er nicht ausgeführt. Wenn dies nicht Ihren Anforderungen entspricht, müssen Sie Ihre Neustarts anders planen. (Dies ist nicht spezifisch für die Verwendung von shutdown, gilt jedoch in gleicher Weise, wenn Sie eine Planung durchführen reboot.) In diesem Fall bearbeiten Sie Ihre Frage, um Ihre spezifischen Anforderungen zu erläutern. (Ich würde dies empfehlen anacron, aber Ihre Zeitintervalle sind viel zu kurz.)
So können Administratoren den automatischen Neustart ganz einfach verhindern:
Möglicherweise möchten Sie dies so einrichten, dass ein Administrator alle automatisch geplanten Neustarts auf einfache Weise unterbrechen kann:
Bei diesem Zeitplan wird der Neustart auf die gleiche Weise geplant - jede halbe Stunde mit einer Warnung von fünf Minuten - mit der Ausnahme, dass kein Neustart geplant wird, wenn eine aufgerufene Datei in noautorebootvorhanden ist /etc.
Diese Steuerdatei kann von einem Administrator erstellt werden mit:
sudo touch /etc/noautoreboot
Es kann gelöscht werden mit:
sudo rm /etc/noautoreboot
Beachten Sie, dass es darauf ankommt , ob die Datei vorhanden ist oder nicht , was sie enthält.
Wenn der Neustart geplant ist und Benutzer gewarnt werden, wird die Datei erstellt, und der (unmittelbar bevorstehende) Neustart wird weiterhin durchgeführt.
Wie funktioniert das? Es verwendet einen Kurzschluss- bewerteten oder Operator ( ||) als Kurzform für:
Wenn/etc/noautoreboot nicht vorhanden, führen Sie aus shutdown -r +5.
Diese Antwort erklärt, wie Kurzschlüsse und / oder Operatoren funktionieren können if- thenLogik. Für eine kurze, intuitive und informelle Erklärung können Sie den Befehl folgendermaßen lesen:
/etc/noautorebootexistiert! Oder renne shutdown -r +5.
Sehen Sie, um man [zu sehen, wie der Test selbst durchgeführt wird.
Ich liebe es, dem Session Manager mitzuteilen, dass wir einen Neustart durchführen möchten. Dies kann ohne Root-Berechtigungen erfolgen, und wir erhalten ein nettes Fenster, das uns warnt, dass das System neu gestartet wird - auch wenn wir den Neustart abbrechen können, wenn wir möchten.
Der grafische Weg - Bevorzugte Methode
Installieren Sie gnome-schedulevom Ubuntu Software Center. Wenn Sie nichts zusätzliches installieren möchten, führen Sie dies auf Terminal Way aus.
Öffnen Sie gnome-scheduleden Bindestrich, erstellen Sie eine neue wiederholte Aufgabe und legen Sie die folgenden Optionen fest:
Sicherer Ausgang. Angenommen, Sie verwenden nano(die Standardeinstellung), drücken Sie Strg + o und Strg + x .
Bitte beachten Sie, dass dies nicht funktioniert, wenn sich Ihr DISPLAY tatsächlich von dem unterscheidet. Aus :0diesem Grund wird diese Methode nicht bevorzugt. Wenn Sie Ihren Computer jedoch alle 30 Minuten neu starten, wird dies höchstwahrscheinlich immer der Fall sein :0.
Verwenden Sie Gnome oder Unity nicht?
Beide oben erläuterten Methoden hängen von einigen Gnome-Komponenten ab, die sich sowohl in Gnome-Sitzungen als auch in Unity befinden. Wenn Sie dies in anderen Umgebungen tun möchten (wie Kubuntus KDE, Kubuntus LXDE ...), sollten Sie stattdessen den Befehl durch diesen ersetzen:
Dies erfordert keine Bestätigung und wird sofort neu gestartet, funktioniert jedoch in allen Umgebungen, vorausgesetzt, Sie haben ConsoleKit nicht manuell deinstalliert.
Führen Sie sudo crontab -evon der Befehlszeile aus und fügen Sie diese Zeile zur Datei hinzu:
0,30 * * * * reboot
Dadurch wird das System angewiesen, den Befehl rebootalle 30 Minuten als root auszuführen . Eine Übersicht über die Zeitsyntax finden Sie hier: http://linuxmoz.com/crontab-syntax-tutorial/
Dies funktioniert nicht, da ausgeführt werden rebootmuss root, und dies fügt es der persönlichen crontab des Benutzers hinzu, sodass es als dieser Nicht-Root-Benutzer ausgeführt wird. (Dasselbe mit sudo rebootwird auch nicht funktionieren, da sudoversucht wird, ein Passwort einzugeben und dies schlägt fehl.) /etc/crontabSollte stattdessen dafür verwendet werden (bitte beachten Sie, dass die Syntax leicht abweicht).
Eliah Kagan
1
Sie könnten sudo crontab -eeinen Cron-Eintrag ausstellen und dann erstellen.
Tass
-3
Verwenden Sie crondiese Option, um alle 30 Minuten einen Job zu planen. Zeigen Sie diesen Job auf ein Shell-Skript, das einfach hat
reboot
drin.
Da es cronals root ausgeführt wird, sollten Sie in Bezug auf die Berechtigungen keine besonderen Maßnahmen ergreifen müssen.
Aktualisieren
Ja, in der Tat erlaube ich auf keinem meiner Systeme benutzerbasierte Crontabs (Es gibt bessere Möglichkeiten, Benutzern geplante Aufgaben auf Benutzerebene zu ermöglichen). Cron wurde von Anfang an ausschließlich für die Systemautomatisierung und nicht für den normalen Zeitplan von Benutzern entwickelt Aufgaben. Dinge wie Holzrotationen (was heute noch passiert)
Neustart MUSS als root ausgeführt werden, um korrekt zu funktionieren. Die Alternative besteht darin, das Sticky-Bit so zu setzen, dass es als normaler Benutzer tatsächlich als root ausgeführt wird und wie erwartet funktioniert. Dabei müssen Sie jedoch Ihren Server öffnen, um reguläres Ausführen zu ermöglichen Benutzer können es nach Belieben neu starten.
Sie könnten sogar möglicherweise einen Anruf an SUDO automatisieren, aber ich muss mich mit diesem befassen, nicht sicher, ob Sie die Notwendigkeit eines Passworts mit SUDO automatisieren können (ich verwende es nicht oft, ich ziehe es vor, einfach direkt bei einem Root zu landen Shell mit SU)
Wenn Sie es in der systemweiten crontab einrichten, wird alles als root ausgeführt, daher ist meine Aussage korrekt (ich habe nur versäumt zu erwähnen, dass die systemweite verwendet werden sollte).
Wie für Ihre Frage "Warum es in ein Skript einwickeln?" Gut, warum nicht? Wenn das OP es in ein Shell-Skript einfügt, muss es zu einem späteren Zeitpunkt einfach hinzugefügt werden, anstatt crontab zu öffnen. Suchen Sie den Job, entfernen Sie ihn, ersetzen Sie ihn durch ein Shell-Skript. Dann schreiben Sie ein Skript mit dem alten + neuen in.
Über 20 Jahre als Sys Admin / Entwickler in der Arbeit mit Systemen bis hin zu Ultrix / Solaris und sogar VAX haben mir einen wichtigen Punkt beigebracht.
Wenn Sie es am Anfang einfacher machen können, bleibt es für die gesamte Lebensdauer einfach.
Ich verstehe diese "minimalistische" Einstellung, die viele moderne Systemadministratoren haben, nicht, wenn der Schlüssel zum Erfolg darin liegt, so wenig wie möglich zu tun. Die meisten Server sind heutzutage mehr als zwanzig Mal leistungsfähiger als alles, mit dem ich je angefangen habe. Diese Art von Szenario (Einwickeln von Shell-Skripten) wurde damals empfohlen. Es gibt also wirklich kein Argument, dies jetzt nicht zu tun.
Es sei denn, Sie möchten wirklich auf Hardcore-Unix / Linux umsteigen. In diesem Fall markieren Sie alles mit dem Cron-Eintrag und fügen alles so zusammen, wie es gemacht werden sollte :-)
Allerdings schweife ich ab und verstehe auch, dass sich viele Jungs heutzutage in die Tiefe werfen und sagen, dass sie die Dinge zum Laufen bringen sollen, da ihnen die Zeit (und normalerweise die Neigung) fehlt, sich hinzusetzen und neue Techniken zu erlernen (oder alt in diesem Fall) oder wollen sogar mit diesem Zeug außerhalb der Arbeit spielen.
Ich persönlich habe einen einzigen Server unter den Servern, auf dem ich herumspielen kann, damit ich solche Dinge testen kann ... besser A oder B, also rate ich nicht ohne Grund zu einem der Server Dies.
Antworten:
Der beste Weg, dies zu tun, hängt davon ab, warum Ubuntu jede halbe Stunde neu gestartet werden soll.
Ich empfehle daher, Ihre Frage zu bearbeiten, um zu erklären, warum Sie dies tun möchten.
Neustart alle 30 Minuten und Warnung der Benutzer vor jedem Neustart:
Unter der Annahme, dass Benutzer den Computer lokal oder remote verwenden, ist es am besten, Ubuntu nicht ohne Vorwarnung von unten neu zu starten. Anstatt den
reboot
Befehl zu planen , empfehle ich daher, denshutdown
Befehl so zu planen, dass der Benutzer gewarnt wird.Fügen Sie Folgendes hinzu, um alle halbe Stunde mit einer Warnung 5 Minuten vorher ein Herunterfahren zu planen
/etc/crontab
:Sie müssen die erste Zeile, die ein Kommentar ist, nicht hinzufügen. Ich habe es aus Gründen der Klarheit eingefügt - so etwas gibt es bereits.
-r
fünf Minuten nach Ausführung+5
des Befehls für einen Neustart ( ) heruntergefahren . Es läuft jede halbe Stunde (*/30
). Sieheman cron
undman 5 crontab
.+5
zu etwas anderem, um zu ändern, wie lange Benutzer nach einer Warnung vor einem Neustart noch Zeit haben.0,30
under minute funktioniert auch, wenn Sie das vorziehen. (Ebenso, wenn es alle 20 Minuten wäre, könnten Sie schreiben*/20
oder0,20,40
.)/sbin
diePATH
Variable oben in angegeben ist/etc/crontab
. Andernfalls mussshutdown
(untercommand
) als aufgerufen werden/sbin/shutdown
.Der Befehl wird immer zur halben Stunde ausgeführt, wenn die Maschine zu diesem Zeitpunkt in Betrieb ist . Dadurch werden die Abschaltungen alle halbe Stunde angekündigt und um 5 Minuten und 35 Minuten nach der vollen Stunde ausgeführt.
sudo shutdown -c
.shutdown
, gilt jedoch in gleicher Weise, wenn Sie eine Planung durchführenreboot
.) In diesem Fall bearbeiten Sie Ihre Frage, um Ihre spezifischen Anforderungen zu erläutern. (Ich würde dies empfehlenanacron
, aber Ihre Zeitintervalle sind viel zu kurz.)So können Administratoren den automatischen Neustart ganz einfach verhindern:
Möglicherweise möchten Sie dies so einrichten, dass ein Administrator alle automatisch geplanten Neustarts auf einfache Weise unterbrechen kann:
Bei diesem Zeitplan wird der Neustart auf die gleiche Weise geplant - jede halbe Stunde mit einer Warnung von fünf Minuten - mit der Ausnahme, dass kein Neustart geplant wird, wenn eine aufgerufene Datei in
noautoreboot
vorhanden ist/etc
.Diese Steuerdatei kann von einem Administrator erstellt werden mit:
Es kann gelöscht werden mit:
Beachten Sie, dass es darauf ankommt , ob die Datei vorhanden ist oder nicht , was sie enthält.
Wenn der Neustart geplant ist und Benutzer gewarnt werden, wird die Datei erstellt, und der (unmittelbar bevorstehende) Neustart wird weiterhin durchgeführt.
Wie funktioniert das? Es verwendet einen Kurzschluss- bewerteten oder Operator (
||
) als Kurzform für:Diese Antwort erklärt, wie Kurzschlüsse und / oder Operatoren funktionieren können
if
-then
Logik. Für eine kurze, intuitive und informelle Erklärung können Sie den Befehl folgendermaßen lesen:Sehen Sie, um
man [
zu sehen, wie der Test selbst durchgeführt wird.quelle
Ich liebe es, dem Session Manager mitzuteilen, dass wir einen Neustart durchführen möchten. Dies kann ohne Root-Berechtigungen erfolgen, und wir erhalten ein nettes Fenster, das uns warnt, dass das System neu gestartet wird - auch wenn wir den Neustart abbrechen können, wenn wir möchten.
Der grafische Weg - Bevorzugte Methode
Installieren Sie
gnome-schedule
vom Ubuntu Software Center. Wenn Sie nichts zusätzliches installieren möchten, führen Sie dies auf Terminal Way aus.Öffnen Sie
gnome-schedule
den Bindestrich, erstellen Sie eine neue wiederholte Aufgabe und legen Sie die folgenden Optionen fest:dbus-send --print-reply --dest="org.gnome.SessionManager" /org/gnome/SessionManager org.gnome.SessionManager.Reboot
Belassen Sie die anderen Optionen auf ihren Standardwerten. Klicken Sie auf Hinzufügen .
Der Terminal-Weg - Keine Notwendigkeit für zusätzliche Software
Führen Sie vom Terminal aus:
Diese Zeile hinzufügen:
Sicherer Ausgang. Angenommen, Sie verwenden
nano
(die Standardeinstellung), drücken Sie Strg + o und Strg + x .Bitte beachten Sie, dass dies nicht funktioniert, wenn sich Ihr DISPLAY tatsächlich von dem unterscheidet. Aus
:0
diesem Grund wird diese Methode nicht bevorzugt. Wenn Sie Ihren Computer jedoch alle 30 Minuten neu starten, wird dies höchstwahrscheinlich immer der Fall sein:0
.Verwenden Sie Gnome oder Unity nicht?
Beide oben erläuterten Methoden hängen von einigen Gnome-Komponenten ab, die sich sowohl in Gnome-Sitzungen als auch in Unity befinden. Wenn Sie dies in anderen Umgebungen tun möchten (wie Kubuntus KDE, Kubuntus LXDE ...), sollten Sie stattdessen den Befehl durch diesen ersetzen:
Dies erfordert keine Bestätigung und wird sofort neu gestartet, funktioniert jedoch in allen Umgebungen, vorausgesetzt, Sie haben ConsoleKit nicht manuell deinstalliert.
quelle
Führen Sie
sudo crontab -e
von der Befehlszeile aus und fügen Sie diese Zeile zur Datei hinzu:0,30 * * * * reboot
Dadurch wird das System angewiesen, den Befehl
reboot
alle 30 Minuten als root auszuführen . Eine Übersicht über die Zeitsyntax finden Sie hier: http://linuxmoz.com/crontab-syntax-tutorial/quelle
reboot
mussroot
, und dies fügt es der persönlichen crontab des Benutzers hinzu, sodass es als dieser Nicht-Root-Benutzer ausgeführt wird. (Dasselbe mitsudo reboot
wird auch nicht funktionieren, dasudo
versucht wird, ein Passwort einzugeben und dies schlägt fehl.)/etc/crontab
Sollte stattdessen dafür verwendet werden (bitte beachten Sie, dass die Syntax leicht abweicht).sudo crontab -e
einen Cron-Eintrag ausstellen und dann erstellen.Verwenden Sie
cron
diese Option, um alle 30 Minuten einen Job zu planen. Zeigen Sie diesen Job auf ein Shell-Skript, das einfach hatdrin.
Da es
cron
als root ausgeführt wird, sollten Sie in Bezug auf die Berechtigungen keine besonderen Maßnahmen ergreifen müssen.Aktualisieren
Ja, in der Tat erlaube ich auf keinem meiner Systeme benutzerbasierte Crontabs (Es gibt bessere Möglichkeiten, Benutzern geplante Aufgaben auf Benutzerebene zu ermöglichen). Cron wurde von Anfang an ausschließlich für die Systemautomatisierung und nicht für den normalen Zeitplan von Benutzern entwickelt Aufgaben. Dinge wie Holzrotationen (was heute noch passiert)
Neustart MUSS als root ausgeführt werden, um korrekt zu funktionieren. Die Alternative besteht darin, das Sticky-Bit so zu setzen, dass es als normaler Benutzer tatsächlich als root ausgeführt wird und wie erwartet funktioniert. Dabei müssen Sie jedoch Ihren Server öffnen, um reguläres Ausführen zu ermöglichen Benutzer können es nach Belieben neu starten.
Sie könnten sogar möglicherweise einen Anruf an SUDO automatisieren, aber ich muss mich mit diesem befassen, nicht sicher, ob Sie die Notwendigkeit eines Passworts mit SUDO automatisieren können (ich verwende es nicht oft, ich ziehe es vor, einfach direkt bei einem Root zu landen Shell mit SU)
Wenn Sie es in der systemweiten crontab einrichten, wird alles als root ausgeführt, daher ist meine Aussage korrekt (ich habe nur versäumt zu erwähnen, dass die systemweite verwendet werden sollte).
Wie für Ihre Frage "Warum es in ein Skript einwickeln?" Gut, warum nicht? Wenn das OP es in ein Shell-Skript einfügt, muss es zu einem späteren Zeitpunkt einfach hinzugefügt werden, anstatt crontab zu öffnen. Suchen Sie den Job, entfernen Sie ihn, ersetzen Sie ihn durch ein Shell-Skript. Dann schreiben Sie ein Skript mit dem alten + neuen in.
Über 20 Jahre als Sys Admin / Entwickler in der Arbeit mit Systemen bis hin zu Ultrix / Solaris und sogar VAX haben mir einen wichtigen Punkt beigebracht.
Wenn Sie es am Anfang einfacher machen können, bleibt es für die gesamte Lebensdauer einfach.
Ich verstehe diese "minimalistische" Einstellung, die viele moderne Systemadministratoren haben, nicht, wenn der Schlüssel zum Erfolg darin liegt, so wenig wie möglich zu tun. Die meisten Server sind heutzutage mehr als zwanzig Mal leistungsfähiger als alles, mit dem ich je angefangen habe. Diese Art von Szenario (Einwickeln von Shell-Skripten) wurde damals empfohlen. Es gibt also wirklich kein Argument, dies jetzt nicht zu tun.
Es sei denn, Sie möchten wirklich auf Hardcore-Unix / Linux umsteigen. In diesem Fall markieren Sie alles mit dem Cron-Eintrag und fügen alles so zusammen, wie es gemacht werden sollte :-)
Allerdings schweife ich ab und verstehe auch, dass sich viele Jungs heutzutage in die Tiefe werfen und sagen, dass sie die Dinge zum Laufen bringen sollen, da ihnen die Zeit (und normalerweise die Neigung) fehlt, sich hinzusetzen und neue Techniken zu erlernen (oder alt in diesem Fall) oder wollen sogar mit diesem Zeug außerhalb der Arbeit spielen.
Ich persönlich habe einen einzigen Server unter den Servern, auf dem ich herumspielen kann, damit ich solche Dinge testen kann ... besser A oder B, also rate ich nicht ohne Grund zu einem der Server Dies.
quelle