At: Unterschied zwischen den Versionen

Aus Linupedia.org
Wechseln zu: Navigation, Suche
(Der Befehl at)
K (systemd - interne Verlinkung)
 
(10 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Autor: Hartmut
 
 
 
== Der Befehl '''at''' ==
 
== Der Befehl '''at''' ==
  
  
at ist die Abkürzung von "at time" und ist dafür gedacht, Befehle zu einem bestimmten Zeitpunkt auszuführen. Dazu gibt man ein:
+
'''at''' ist die Abkürzung von "at time" und ist dafür gedacht, Befehle zu einem bestimmten Zeitpunkt auszuführen. Dazu gibt man ein:
 
+
<pre>
    at hh:mm also z.B. at 17:30 (hinter jede Zeile kommt natürlich die Enter-Taste)
+
at hh:mm also z.B. at 17:30 (hinter jede Zeile kommt natürlich die Enter-Taste)
 
+
</pre>
 
Der Befehl meldet sich mit einer Warnung und seinem eigenen Prompt
 
Der Befehl meldet sich mit einer Warnung und seinem eigenen Prompt
 +
<pre>
 +
warning: commands will be executed using /bin/sh
 +
at>
 +
</pre>
  
    warning: commands will be executed using /bin/sh
+
und nimmt jetzt beliebige Shell-Befehle entgegen, die dann zu der angegebenen Uhrzeit ausgeführt werden. Die Zeit wird auch im 24-Stunden-Format angenommen und der Befehl wird zur nächsten passenden Uhrzeit ausgeführt, das geht also ohne Probleme auch über Mitternacht hinweg. '''at''' nimmt auch Tage, Wochen und Monate an und ein bestimmtes Datum wird auch akzeptiert. Siehe [http://linux.die.net/man/1/at man at].
    at>
 
  
und nimmt jetzt beliebige Shell-Befehle entgegen, die dann zu der angegebenen Uhrzeit ausgeführt werden. Die Zeit wird auch im 24-Stunden-Format angenommen und der Befehl wird zur nächsten passenden Uhrzeit ausgeführt, das geht also ohne Probleme auch über Mitternacht hinweg. at nimmt auch Tage, Wochen und Monate an und ein bestimmtes Datum wird auch akzeptiert. Siehe man at.
+
'''Voraussetzung''': der at-Dämon '''atd''' muss laufen. Das lässt sich kontrollieren/einstellen mit Yast/System/Runlevel-Editor. ([[#Update_f.C3.BCr_Opensuse_12.2_RC2|Hinweise]] für Opensuse 12.2 RC2 oder Problemen bei start von '''atd''' bei [[systemd]] )
  
  
'''Die Anwendung von at jetzt an einem Beispiel'''
 
  
Der Rechner soll bis in die Nacht irgendeine Fernsehsendung aufzeichnen und kann dann runtergefahren werden. Leider darf der normale Benutzer den Befehl shutdown nicht benutzen, wenn er nicht explizit die Berechtigung dafür erhält. Das wird so erreicht:
+
== Die Anwendung von at an einem Beispiel ==
  
Zuerst als su:
+
Der Rechner soll bis in die Nacht irgendeine Fernsehsendung aufzeichnen und kann dann runtergefahren werden. Leider darf der normale Benutzer den Befehl [http://linux.die.net/man/8/shutdown shutdown] nicht benutzen, wenn er nicht explizit die Berechtigung dafür erhält. Das wird so erreicht:
  
    joe /etc/sudoers
+
Zuerst als user root:
 +
<pre>
 +
joe /etc/sudoers
 +
</pre>
  
 
und am Ende einfügen:
 
und am Ende einfügen:
 +
<pre>
 +
(username) (hostname)=NOPASSWD:/sbin/shutdown -h now -P
 +
</pre>
 +
(Update: der Parameter "-P" ist für "Strom abschalten" zuständig.)
  
    (username) (hostname)=NOPASSWD:/sbin/shutdown -h now
+
[http://linux.die.net/man/1/joe joe] wird beendet mit '''STRG''' + '''X'''
  
joe wird beendet mit STRG und X
+
Damit darf der User ''username'' am Computer ''hostname'' den Rechner mit '''shutdown''' herunterfahren. Der Befehl vom Benutzer eingegeben muss genauso aussehen, wie er in der /etc/sudoers steht, sonst läuft nix!
 
 
Damit darf der User username am Computer hostname den Rechner mit shutdown herunterfahren.
 
  
 
Für den at-Aufruf eingeben:
 
Für den at-Aufruf eingeben:
 
+
<pre>
    at hh:mm
+
at hh:mm
 +
</pre>
  
 
es meldet sich dann at mit
 
es meldet sich dann at mit
 +
<pre>
 +
at>
 +
</pre>
 +
danach eingeben:
 +
<pre>
 +
sudo /sbin/shutdown -h now -P
 +
</pre>
  
    at>
+
es meldet sich wieder at mit dem prompt "at>"
 
 
danach eintippen:
 
 
 
    sudo /sbin/shutdown -h now
 
es meldet sich wieder at mit:
 
 
 
    at>
 
  
 +
 
 
Jetzt at beenden mit STRG und D und es folgt die Meldung:
 
Jetzt at beenden mit STRG und D und es folgt die Meldung:
 +
<pre>
 +
<EOT>
 +
job (Nr) at yyyy-mm-dd hh:mm
 +
</pre>
 +
Der Rechner wird jetzt um hh:mm heruntergefahren. Die Konsole kann jetzt beendet werden. Wer sicher gehen will, kann den Job auch noch abfragen mit dem Befehl [http://linux.die.net/man/1/atq atq]
  
    <EOT>
+
 
    job (Nr) at yyyy-mm-dd hh:mm
+
Es erscheint die Antwort:
 +
<pre>
 +
(Nr)   yyyy-mm-dd hh:mm a username
 +
</pre>
  
Der Rechner wird jetzt um hh:mm heruntergefahren. Die Konsole kann jetzt beendet werden. Wer sicher gehen will, kann den Job auch noch abfragen mit:  
+
Löschen des Jobs geht mit dem Befehl [http://linux.die.net/man/1/atrm atrm]:
 +
<pre>
 +
atrm (Nr)
 +
</pre>
  
    atq
+
Es folgt keine Rückmeldung, ein '''atq''' gibt auch nichts her, d.h.: es gibt keinen Job mehr.
  
Es erscheint die Antwort:
+
Falls etwas schief geht, schickt '''at''' eine Mail an den Benutzer username, der nächste Start der Konsole zeigt an, dass neue Mail eingetroffen ist.
  
    (Nr)  yyyy-mm-dd hh:mm a username
+
== Ein zweites Beispiel ==
  
Löschen des Jobs geht mit:
+
Es soll zu einer bestimmten Zeit eine Nachricht auf dem Bildschirm erscheinen, z.B. die Nachricht, dass die Waschmaschine fertig ist.
 +
<pre>
 +
at 20:30
 +
warning: commands will be executed using /bin/sh
 +
at> xterm -iconic -display :0.0 -e 'kdialog --msgbox "Die Wäsche muss aufgehängt werden" --title Achtung'
 +
at> (STRG-D)
 +
</pre>
  
    atrm (Nr)
+
Das ruft das Terminalfenster xterm auf in unsichtbarer Form (-iconic), welches seinerseits auf der grafischen Oberfläche 0.0 seine Arbeit tut und mit -e das nachfolgende Kommmando ausführt. Die eigentliche Ausgabe erledigt kdialog. Den Namen des Displays erhält man mit
 +
<pre>
 +
echo $DISPLAY
 +
</pre>
  
Es folgt keine Rückmeldung, aber ein
+
Viel Spaß und Fantasie beim Ausdenken von Aufgaben ("Teewasser kocht", "Ute hat morgen Geburtstag", "Zeit ins Bett zu gehen" usw.).
  
    atq
 
  
gibt auch nichts her, d.h.: es gibt keinen Job mehr.
 
  
Falls etwas schief geht, schickt at eine Mail an den Benutzer username, der nächste Start der Konsole zeigt an, das neue Mail eingetroffen ist:
+
== Update für Opensuse 13.x ==
  
 +
Systemcontrol ist ab hier für die Erlaubnis zum automatischen Start, den Start und Stop eines Services zuständig in der Form:
 +
systemctl start|Stop|Status|enable|disable Dienstname.service
 +
In Sachen des at-Daemons sieht das so aus:
 +
systemctl status atd.service
 +
Ausgabe:
 +
atd.service - Execution Queue Daemon
 +
  Loaded: loaded (/etc/systemd/system/atd.service; enabled)
 +
  Active: active (running) since Mi 2014-12-24 10:07:40 CET; 5h 53min ago
 +
  Process: 674 ExecStart=/usr/sbin/atd (code=exited, status=0/SUCCESS)
 +
Main PID: 715 (atd)
 +
  CGroup: /system.slice/atd.service
 +
          └─715 /usr/sbin/atd
 +
Dez 24 10:07:39 Jupiter systemd[1]: Starting Execution Queue Daemon...
 +
Dez 24 10:07:40 Jupiter systemd[1]: Started Execution Queue Daemon.
  
== Ein zweites Beispiel ==
+
Falls der atd nicht - wie hier - läuft, dann hilft:
 +
systemctl start atd
 +
(das ".service" darf weggelassen werden)
  
Es soll zu einer bestimmten Zeit eine Nachricht auf dem Bildschirm erscheinen, z.B. die Nachricht, dass die Waschmaschine fertig ist.
+
Damit der atd beim nächsten Systemstart automatisch gestartet wird:
 
+
systemctl enable atd
    at 20:30
 
    warning: commands will be executed using /bin/sh
 
    at> xterm -iconic -display :0.0 -e 'kdialog --msgbox "Die Wäsche muss aufgehängt werden" --title Achtung'
 
    at> (STRG-D)
 
 
 
Das ruft das Terminalfenster xterm auf in unsichtbarer Form (-iconic), welches seinerseits auf der grafischen Oberfläche 0.0 seine Arbeit tut und mit -e das nachfolgende Kommmando ausführt. Die eigentliche Ausgabe erledigt kdialog. Den Namen des Displays erhält man mit
 
  
    echo $DISPLAY
+
Das war's im wesentlichen, viel Spaß
  
Viel Spaß und Fantasie beim Ausdenken von Aufgaben (Teewasser kocht, Ute hat morgen Geburtstag, www.ab_ins_bett.de usw.).
+
<!-- Autor: Hartmut -->
  
 
[[Category:Konsole]]
 
[[Category:Konsole]]

Aktuelle Version vom 23. August 2015, 06:28 Uhr

Der Befehl at

at ist die Abkürzung von "at time" und ist dafür gedacht, Befehle zu einem bestimmten Zeitpunkt auszuführen. Dazu gibt man ein:

at hh:mm also z.B. at 17:30 (hinter jede Zeile kommt natürlich die Enter-Taste)

Der Befehl meldet sich mit einer Warnung und seinem eigenen Prompt

warning: commands will be executed using /bin/sh
at>

und nimmt jetzt beliebige Shell-Befehle entgegen, die dann zu der angegebenen Uhrzeit ausgeführt werden. Die Zeit wird auch im 24-Stunden-Format angenommen und der Befehl wird zur nächsten passenden Uhrzeit ausgeführt, das geht also ohne Probleme auch über Mitternacht hinweg. at nimmt auch Tage, Wochen und Monate an und ein bestimmtes Datum wird auch akzeptiert. Siehe man at.

Voraussetzung: der at-Dämon atd muss laufen. Das lässt sich kontrollieren/einstellen mit Yast/System/Runlevel-Editor. (Hinweise für Opensuse 12.2 RC2 oder Problemen bei start von atd bei systemd )


Die Anwendung von at an einem Beispiel

Der Rechner soll bis in die Nacht irgendeine Fernsehsendung aufzeichnen und kann dann runtergefahren werden. Leider darf der normale Benutzer den Befehl shutdown nicht benutzen, wenn er nicht explizit die Berechtigung dafür erhält. Das wird so erreicht:

Zuerst als user root:

joe /etc/sudoers

und am Ende einfügen:

(username) (hostname)=NOPASSWD:/sbin/shutdown -h now -P

(Update: der Parameter "-P" ist für "Strom abschalten" zuständig.)

joe wird beendet mit STRG + X

Damit darf der User username am Computer hostname den Rechner mit shutdown herunterfahren. Der Befehl vom Benutzer eingegeben muss genauso aussehen, wie er in der /etc/sudoers steht, sonst läuft nix!

Für den at-Aufruf eingeben:

at hh:mm

es meldet sich dann at mit

at>

danach eingeben:

sudo /sbin/shutdown -h now -P

es meldet sich wieder at mit dem prompt "at>"


Jetzt at beenden mit STRG und D und es folgt die Meldung:

<EOT>
job (Nr) at yyyy-mm-dd hh:mm

Der Rechner wird jetzt um hh:mm heruntergefahren. Die Konsole kann jetzt beendet werden. Wer sicher gehen will, kann den Job auch noch abfragen mit dem Befehl atq


Es erscheint die Antwort:

(Nr)   yyyy-mm-dd hh:mm a username

Löschen des Jobs geht mit dem Befehl atrm:

atrm (Nr)

Es folgt keine Rückmeldung, ein atq gibt auch nichts her, d.h.: es gibt keinen Job mehr.

Falls etwas schief geht, schickt at eine Mail an den Benutzer username, der nächste Start der Konsole zeigt an, dass neue Mail eingetroffen ist.

Ein zweites Beispiel

Es soll zu einer bestimmten Zeit eine Nachricht auf dem Bildschirm erscheinen, z.B. die Nachricht, dass die Waschmaschine fertig ist.

at 20:30
warning: commands will be executed using /bin/sh
at> xterm -iconic -display :0.0 -e 'kdialog --msgbox "Die Wäsche muss aufgehängt werden" --title Achtung'
at> (STRG-D)

Das ruft das Terminalfenster xterm auf in unsichtbarer Form (-iconic), welches seinerseits auf der grafischen Oberfläche 0.0 seine Arbeit tut und mit -e das nachfolgende Kommmando ausführt. Die eigentliche Ausgabe erledigt kdialog. Den Namen des Displays erhält man mit

echo $DISPLAY

Viel Spaß und Fantasie beim Ausdenken von Aufgaben ("Teewasser kocht", "Ute hat morgen Geburtstag", "Zeit ins Bett zu gehen" usw.).


Update für Opensuse 13.x

Systemcontrol ist ab hier für die Erlaubnis zum automatischen Start, den Start und Stop eines Services zuständig in der Form:

systemctl start|Stop|Status|enable|disable Dienstname.service

In Sachen des at-Daemons sieht das so aus:

systemctl status atd.service

Ausgabe:

atd.service - Execution Queue Daemon
  Loaded: loaded (/etc/systemd/system/atd.service; enabled)
  Active: active (running) since Mi 2014-12-24 10:07:40 CET; 5h 53min ago
 Process: 674 ExecStart=/usr/sbin/atd (code=exited, status=0/SUCCESS)
Main PID: 715 (atd)
  CGroup: /system.slice/atd.service
          └─715 /usr/sbin/atd
Dez 24 10:07:39 Jupiter systemd[1]: Starting Execution Queue Daemon...
Dez 24 10:07:40 Jupiter systemd[1]: Started Execution Queue Daemon.

Falls der atd nicht - wie hier - läuft, dann hilft:

systemctl start atd

(das ".service" darf weggelassen werden)

Damit der atd beim nächsten Systemstart automatisch gestartet wird:

systemctl enable atd

Das war's im wesentlichen, viel Spaß