In diesem speziellen Fall, denke ich, kann man einfach das benutzen shutdown. Befehl mit sudo und den entsprechenden Argumenten, um den Ruhezustand zu einem bestimmten Zeitpunkt zu planen.
Was ist die Aufgabe, die Sie tun müssen, und warum genau 4 Stunden Schlaf?
Thorbjørn Ravn Andersen
Antworten:
46
Verwenden sudoSie diese Option , um eine Root-Shell zu starten, in der Sie die Befehle ausführen:
sudo bash -c 'sleep 4h; command'
Jeder Befehl, der in der Root-Shell ausgeführt wird, wird mit Root-Berechtigungen ausgeführt, was sleepjedoch nicht schadet. Wenn Sie einen Befehl mit Benutzerberechtigungen ausführen müssen, verwenden Sie sudo -u USERNAME COMMANDzB:
$ sudo bash -c 'sleep 4h; sudo -u dessert whoami; whoami'
dessert # whoami run as user dessert
root # whoami run as root
Ja, dies atist das richtige Tool für diesen Job, da es auch die E / A-Umleitung übernimmt, kein Shell-Fenster blockiert und auch dann funktioniert, wenn sich der Benutzer abgemeldet hat oder der Computer seitdem neu gestartet wurde.
Simon Richter
4
@SimonRichter: Das Versetzen sudo bash -c 'sleep 4h && command' &von sudo in den Hintergrund ist eine einfachere Möglichkeit, ein Shell-Fenster / eine Shell-Registerkarte nicht zu blockieren. Wenn Sie möchten die Ausgabe Pop - up asynchron als Erinnerung , dass es passiert ist , ist das einfacher. Es funktioniert nicht über Neustarts hinweg, aber abhängig von Ihren nohupEinstellungen kann es nach dem Beenden / Abmelden von einer Shell weiter ausgeführt werden.
Peter Cordes
4
Beachten Sie, dass atder Befehl ausgeführt wird, sobald er in der Lage ist, das System zum angegebenen Zeitpunkt anzuhalten. Weitere Informationen finden Sie hier unter U & L. Abhängig von den auszuführenden Befehlen ist dies möglicherweise nicht das, was Sie möchten.
Dessert
2
Nur ein Vorschlag, Sie können auch systemctl verwenden, um den Dienststatus zu überprüfen, anstatt das init.d-Skript direkt aufzurufen. Obwohl beide scheinbar das gleiche Ergebnis haben, sollte die moderne Art der Interaktion mit systemd-Diensten bevorzugt werden:systemctl status atd
Byte Commander
15
Eine Möglichkeit besteht darin, ein Shellscript mit sudoBerechtigungen auszuführen (und das Kennwort anzugeben, wenn Sie das Shellscript starten), wenn sich das Shellscript im aktuellen Verzeichnis befindet.
sudo ./delayer 4h
wo delayerkann ein shellscript mit dem inhalt sein
#!/bin/bash
sleep "$1"
command
Machen Sie es ausführbar mit
chmod +x delayer
und kopieren oder verschieben Sie es in ein Verzeichnis, PATHwenn Sie möchten.
Wenn Sie ein flexibleres Shellscript möchten, bei dem Sie den Befehl [Zeile] zum Verzögern auswählen können, indem Sie Parameter eingeben, können Sie es versuchen
Nun, wenn es /bin/shSyntax ist, wird es in Ordnung sein. Wenn Sie jedoch bashspezifische Funktionen verwenden möchten, ist shebang erforderlich. Ich und Stahlfahrer hatten irgendwo eine Diskussion darüber. Aaand Videonauth hat seinen Kommentar gelöscht, bevor ich richtig antworten konnte. Na
ja
@SergiyKolodyazhnyy, Sie haben recht. In diesem Fall ist der Shebang also da, um das Shellscript für den Fall von zusätzlichen Funktionen, bei denen die Syntax abweichen kann, robust zu machen.
Sudodus
@SergiyKolodyazhnyy Nun, es war nur ein Vorschlag, also dachte ich, den Kommentar dort zu lassen, sei nicht notwendig und würde nur zur Unordnung beitragen.
Zögern Sie nicht,
2
Eine andere Möglichkeit wäre, die interaktive sudo-Sitzung mit sudo -s(ändert das Verzeichnis nicht) oder sudo -i(ändert das aktuelle Verzeichnis in das Stammverzeichnis) zu starten und dann Ihre Befehle einzugeben (ohne sudo).
shutdown
. Befehl mit sudo und den entsprechenden Argumenten, um den Ruhezustand zu einem bestimmten Zeitpunkt zu planen.Antworten:
Verwenden
sudo
Sie diese Option , um eine Root-Shell zu starten, in der Sie die Befehle ausführen:Jeder Befehl, der in der Root-Shell ausgeführt wird, wird mit Root-Berechtigungen ausgeführt, was
sleep
jedoch nicht schadet. Wenn Sie einen Befehl mit Benutzerberechtigungen ausführen müssen, verwenden Siesudo -u USERNAME COMMAND
zB:Ein anderer Ansatz wäre,
sudo visudo
die Ausführung des Befehls ohne Root-Zugriff zuzulassen. Weitere Informationen finden Sie unter: So lassen Sie die Ausführung zu, ohne dass Sie zur Eingabe eines Kennworts mit sudo aufgefordert werden.Beachten Sie, dass dies je nach Befehl zu einer Sicherheitslücke führen kann.
quelle
Angenommen, Sie möchten den Prozess nur einmal ausführen (nicht z. B. alle 4 Stunden), können Sie ihn verwenden
atd
/etc/init.d/atd status
oder noch bessersystemctl status atd
)Führen Sie an einem Terminal als root Ihren Befehl wie folgt aus:
Wenn Sie es alle 4 Stunden ausführen möchten, können Sie auch cron (als root) mit der folgenden Konfiguration in Ihrer crontab verwenden
quelle
at
ist das richtige Tool für diesen Job, da es auch die E / A-Umleitung übernimmt, kein Shell-Fenster blockiert und auch dann funktioniert, wenn sich der Benutzer abgemeldet hat oder der Computer seitdem neu gestartet wurde.sudo bash -c 'sleep 4h && command' &
von sudo in den Hintergrund ist eine einfachere Möglichkeit, ein Shell-Fenster / eine Shell-Registerkarte nicht zu blockieren. Wenn Sie möchten die Ausgabe Pop - up asynchron als Erinnerung , dass es passiert ist , ist das einfacher. Es funktioniert nicht über Neustarts hinweg, aber abhängig von Ihrennohup
Einstellungen kann es nach dem Beenden / Abmelden von einer Shell weiter ausgeführt werden.at
der Befehl ausgeführt wird, sobald er in der Lage ist, das System zum angegebenen Zeitpunkt anzuhalten. Weitere Informationen finden Sie hier unter U & L. Abhängig von den auszuführenden Befehlen ist dies möglicherweise nicht das, was Sie möchten.systemctl status atd
Eine Möglichkeit besteht darin, ein Shellscript mit
sudo
Berechtigungen auszuführen (und das Kennwort anzugeben, wenn Sie das Shellscript starten), wenn sich das Shellscript im aktuellen Verzeichnis befindet.wo
delayer
kann ein shellscript mit dem inhalt seinMachen Sie es ausführbar mit
und kopieren oder verschieben Sie es in ein Verzeichnis,
PATH
wenn Sie möchten.Wenn Sie ein flexibleres Shellscript möchten, bei dem Sie den Befehl [Zeile] zum Verzögern auswählen können, indem Sie Parameter eingeben, können Sie es versuchen
Demo-Beispiel (kurze Verzögerung, 5s, für Demo-Zwecke),
quelle
/bin/sh
Syntax ist, wird es in Ordnung sein. Wenn Sie jedoch bashspezifische Funktionen verwenden möchten, ist shebang erforderlich. Ich und Stahlfahrer hatten irgendwo eine Diskussion darüber. Aaand Videonauth hat seinen Kommentar gelöscht, bevor ich richtig antworten konnte. NaEine andere Möglichkeit wäre, die interaktive sudo-Sitzung mit
sudo -s
(ändert das Verzeichnis nicht) odersudo -i
(ändert das aktuelle Verzeichnis in das Stammverzeichnis) zu starten und dann Ihre Befehle einzugeben (ohne sudo).quelle