Forum: PC Hard- und Software Linux verzögert in Schlafmodus versetzen (CLI) ?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von schlafwandler (Gast)


Lesenswert?

Hallo an Alle,

Ich benutze rege den Befehl
1
 $ sudo  shutdown -h  +123
 und entferne mich dann von den Maschinen.

Nun würde ich gerne auch
1
 $ sudo  systemctl  suspend
 mit langen Verzögerungszeiten einsetzen.

Wenn ich unbedarft sleep und sudo verkette, verstreicht das Timeout 
zu sudo und für "suspend" wird wieder die interaktive Passworteingabe 
fällig.

Wie muss ich das anstellen, um unbemannt nach langer Verzögerung die 
Maschinen in den Schlafzustand zu versetzen?
Gernst unabhängig vom sudo-timeout, das möchte ich nicht 
umkonfigurieren.

NB: GUI-Lösungen interessieren mich bloss nebensächlich, CLI ist 
gefragt.

von Nikolaus S. (Firma: Golden Delicious Computers) (hns)


Lesenswert?

schlafwandler schrieb:
> Hallo an Alle,
> Nun würde ich gerne auch
1
 $ sudo  systemctl  suspend
 mit
> langen Verzögerungszeiten einsetzen.
>
> Wenn ich unbedarft sleep und sudo verkette, verstreicht das Timeout
> zu sudo und für "suspend" wird wieder die interaktive Passworteingabe
> fällig.

Leider hast Du nicht exakt beschrieben welcher Befehl schiefgeht...
Ich spekuliere aber auf
1
 $ sleep 100; sudo  systemctlsuspend

Probiere mal:
1
 $ sudo sh -c 'sleep 100; systemctl suspend'

Dann wird sofort nach dem sudo-passwort gefragt, dann 100 Sekunden in 
einer Subshell gewartet und dann läuft der systemctl.

: Bearbeitet durch User
von Εrnst B. (ernst)


Lesenswert?

1
sudo bash -c "sleep 123 ; systemctl suspend"

von Hmmm (Gast)


Lesenswert?

schlafwandler schrieb:
> Wenn ich unbedarft sleep und sudo verkette

Lass das sleep zusammen mit dem Rest von sudo ausführen.

von Mirko W. (Gast)


Lesenswert?


von Schlaumaier (Gast)


Lesenswert?

du kannst es auch Zeitgesteuert machen, mit RTCWAKE.

Der Befehl hat viele Parameter. ;)

Wäre vielleicht ne Alternativlösung.

von schlafwandler (Gast)


Lesenswert?

Danke!

Ok, auf die "verkomplizierung" mit Angabe der Shell und -c bin ich nicht 
gekommen.

Ich versuchte
1
 $ sudo sleep $((123 * 60)) && sudo systemctl suspend
2
3
und
4
5
 $ sudo '(sleep $((123 * 60)) && systemctl suspend)' 
6
7
o.ä.

Alleine durch lesen der manpage zu sudo ist es nicht trivial darauf zu 
kommen... :-/ (doch, 1 einzelenes Bsp. ist im Abschnitt EXAMPLES 
immerhin still aufgeführt)

HINTS für Nachleser dieses Threads:

 -c ist hier NICHT Option von sudo sondern von bash resp. sh

 ev. sind in der so eingeleiteten neuen sudo-subshell nicht alle/die 
selben Aliasse und Funktionen verfügbar wie in der interakiven shell wo 
das ganze losgetreten wird...

von Εrnst B. (ernst)


Lesenswert?

schlafwandler schrieb:
> sleep $((123 * 60))

nur der Vollständigkeit halber:
Sleep akzeptiert (nicht POSIX, für die Puristen...) auch die Angabe von 
Einheiten:

>>  »s« für Sekunden (Vorgabe), »m« für Minuten, »h« für Stunden oder »d« für 
Tage.

d.H. "sleep 123m"

von 2aggressive (Gast)


Lesenswert?

schlafwandler schrieb:
> Ich benutze rege den Befehl $ sudo  shutdown -h  +123
>  und entferne mich dann von den Maschinen.
Wenn ein Bösewitzbold innerhalb des sudo-timeouts in die laufende shell 
(egal ob lokal oder per ssh) reinkommt hast du ein Problem.
Deshalb benutze ich sudo ausschliesslich mit der option "-k". Zum 
Thema:


> Nun würde ich gerne auch $ sudo  systemctl  suspend
>  mit langen Verzögerungszeiten einsetzen.
Das schreit nach einem script. Könnte man mit parametern Füttern (zB "~$ 
schlafin 123")



Eine Vorlage
 -Warnung; das script ist irgendwann mal quick and dirty entstanden- 
nichts hält solange wie ein Provisorium :D:

Manchmal habe ich noch irgendwelche Downloads laufen, wenn fertig soll 
die Kiste runterfahren, das sieht auf dem Schirm folgendermassen aus:
~$ aus_wenn_nw_schlaeft.sh
You are just an ordinary user (but mom loves you just the same).
......try sudo!!!
~$
~$
~$
~$ sudo -k aus_wenn_nw_schlaeft.sh
[sudo] password:
You are root.
Rechner geht aus, wenn Netzwerkspeed (Messintervall 60 Sekunden)
5000 Byte/s unterschreitet

Die erste (vorab 10s) Messung folgt.....
Aktuell 393822 Bytes pro Sekunde

Ab jetzt 60s Intervalle.....
achtung: shutdown ist scharf !!! ...abbruch_mit_ctrl_c
Aktuell 233718 Bytes pro Sekunde
Aktuell 139676 Bytes pro Sekunde
Aktuell 187 Bytes pro Sekunde
---------------------
SHUTDOWN in 2 Minuten
---------------------
LETZTE RETTUNG:
START A NEW, USABLE,
AND VISIBLE SHELL. TYPE:

sudo -k shutdown -c


An alle Benutzer verteilte Nachricht
  (/dev/pts/4) um 15:59 ...

The system is going down for halt in 2 minutes!
^Cshutdown: shutdown abgebrochen
~$ ls /root
ls: Öffnen von Verzeichnis /root nicht möglich: Keine Berechtigung
~$

So solls sein. Hinweis: aus_wenn_nw_schlaeft.sh lässt sich hier durch 
"aus" tabbend vervollständigen, den ganzen Senf tippe ich natürlich 
nicht.



Und so habe ich das verscriptet (Inhalt von bin ist im üblicherweise 
im Suchpfad jeder shell):
~$ which aus_wenn_nw_schlaeft.sh
/bin/aus_wenn_nw_schlaeft.sh
~$
~$
~$ ls -l /bin/aus_wenn_nw_schlaeft.sh
-rwxr-xr-x 1 root root 1490 2021-05-06 15:13 
/bin/aus_wenn_nw_schlaeft.sh
~$ # bitte nicht wundern wenn die Grösse (1490 Byte) nicht exakt stimmt 
- fürs Beispiel ist das folgende listing etwas gekürzt!
~$
~$
~$ cat /bin/aus_wenn_nw_schlaeft.sh
#!/bin/bash

# am-i-root.sh:   Am I root or not?
ROOT_UID=0   # Root has $UID 0.
if [ "$UID" -eq "$ROOT_UID" ]  # Will the real "root" please stand up?
then
  echo "You are root."
else
  echo "You are just an ordinary user (but mom loves you just the 
same)."
  echo "try sudo!!!"
  echo
  echo
exit 0
fi

#edit20210506 tooslow=500
tooslow=5000

echo "Rechner geht aus, wenn Netzwerkspeed (Messintervall 60 Sekunden)"
echo $tooslow" Byte/s unterschreitet"
echo
echo "Die erste (vorab 10s) Messung folgt....."
oldrx=`ifconfig eth0 | grep "RX bytes:" | awk -F ":" '{print $2}' | awk 
'{print $1}'`
sleep 10
rx=`ifconfig eth0 | grep "RX bytes:" | awk -F ":" '{print $2}' | awk 
'{print $1}'`
speed=$((($rx-$oldrx)/10))
echo "Aktuell "$speed" Bytes pro Sekunde"
echo
echo "Ab jetzt 60s Intervalle....."
echo "achtung: shutdown ist scharf !!! ...abbruch_mit_ctrl_c"

while [ $tooslow -lt $speed ];do
  sleep 60
  oldrx=$rx
  rx=`ifconfig eth0 | grep "RX bytes:" | awk -F ":" '{print $2}' | awk 
'{print $1}'`
  speed=$((($rx-$oldrx)/60))
# RX laeuft bei 4G ueber(ifconfig 32Bit), speed---> negative Werte. 
Loesung mit Brechstange:
  if [ $speed -lt 0 ]; then
    speed=123456
  fi
  echo "Aktuell "$speed" Bytes pro Sekunde"
done
echo  "---------------------"
echo  "SHUTDOWN in 2 Minuten"
echo  "---------------------"
echo  "LETZTE RETTUNG:"
echo  "START A NEW, USABLE,"
echo  "AND VISIBLE SHELL. TYPE:"
echo
echo  "sudo -k shutdown -c"
echo
shutdown -h 2

~$


Vielleicht kann ja irgendwann mal irgendwer irgendetwas davon als 
Anregung brauchen :D

von Nur_ein_Typ (Gast)


Lesenswert?

2aggressive schrieb:
> schlafwandler schrieb:
>> Ich benutze rege den Befehl $ sudo  shutdown -h  +123
>>  und entferne mich dann von den Maschinen.
> Wenn ein Bösewitzbold innerhalb des sudo-timeouts in die laufende shell
> (egal ob lokal oder per ssh) reinkommt hast du ein Problem.

Wenn das passieren sollte, dann ist $Bösewitzbold entweder Du oder root. 
In beiden Fällen ist der sudo-Timeout Dein kleinstes Problem.

von 2aggressive (Gast)


Lesenswert?

OT
Nur_ein_Typ schrieb:
> Wenn das passieren sollte, dann ist $Bösewitzbold entweder Du oder root.
Naja, der "echte" root ist kein Bösewitzbold, den Fall kann man getrost 
ausschliessen. Allerdings nur solange keiner der sudo-er ausgetrickst 
wird.

$Bösewitzbold, vom Rechner aus gesehen mit meiner Identität, hat dann 
rootrechte. Mit allem was dies bedeutet, inklusive neuer Identität des 
(neuen) $Böseroot.

> In beiden Fällen ist der sudo-Timeout Dein kleinstes Problem.
Das sudo-Timeout ist nicht das Problem, sondern die Ursache des 
vorgestellten Szenarios.

von preview (Gast)


Lesenswert?

man systemd-run


---
atd wäre wenigstens noch halbwegs aktuell

von preview (Gast)


Lesenswert?

2aggressive schrieb:

>
> Vielleicht kann ja irgendwann mal irgendwer irgendetwas davon als
> Anregung brauchen :D



Wer parsed schon noch ifconfig,
zumal oftmals garnicht mehr vorhanden.


lies doch einfach


/sys/class/net/.../statistics/rx_bytes
/sys/class/net/.../statistics/tx_bytes


oder Ausgabe eines tool das schon berechnet


k.A. mal gucken was es hier gerade gibt:

$apropos statistic
ctstat (8)           - unified linux network statistics
dmstats (8)          - device-mapper statistics management
htstat (1)           - returns statistics on the document and word 
databases, much like the -s option to htdig or htmerge.
ifstat (1)           - Report InterFace STATistics
iwspy (8)            - Get wireless statistics from specific nodes
lnstat (8)           - unified linux network statistics
netstat (8)          - Print network connections, routing tables, 
interface statistics, masquerade connections, and multicast memberships
nstat (8)            - network statistics tools.
prtstat (1)          - print statistics of a process
rtacct (8)           - network statistics tools.
rtstat (8)           - unified linux network statistics
vmstat (8)           - Report virtual memory statistics




netstat -i, ifstat  1 1, ...

von Nur_ein_Typ (Gast)


Lesenswert?

preview schrieb:
> Wer parsed schon noch ifconfig,
> zumal oftmals garnicht mehr vorhanden.

man 8 ip

von preview (Gast)


Lesenswert?

Nur_ein_Typ schrieb:
> preview schrieb:
>> Wer parsed schon noch ifconfig,
>> zumal oftmals garnicht mehr vorhanden.
>
> man 8 ip

Naja, das ist hier auch nicht besser

$ip -h -s link show dev enp0s9
2: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 
state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether 00:50:ba:c6:e7:54 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    9.77G      6.68M    0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    300M       4.18M    5       0       0       0



$cat /sys/class/net/enp0s9/statistics/tx_bytes
300128186
$cat /sys/class/net/enp0s9/statistics/rx_bytes
9769332055

gibt Zahlen zum rechnen

oder ein

cat  /proc/net/dev




aber ein z.B.

$ifstat  1 1
      enp0s9
 KB/s in  KB/s out
    0.00      0.00


1 1, gäbe einen ein-sekündigen Schnappschuss
Er will doch einfach die Rate.
Das muss man doch nicht dauernd durch ein skript nudeln.

von Nur_ein_Typ (Gast)


Lesenswert?

preview schrieb:
> Nur_ein_Typ schrieb:
>> preview schrieb:
>>> Wer parsed schon noch ifconfig,
>>> zumal oftmals garnicht mehr vorhanden.
>>
>> man 8 ip
>
> Naja, das ist hier auch nicht besser
>
> $ip -h -s link show dev enp0s9
> 2: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
> state UNKNOWN mode DEFAULT group default qlen 1000
>     link/ether 00:50:ba:c6:e7:54 brd ff:ff:ff:ff:ff:ff
>     RX: bytes  packets  errors  dropped overrun mcast
>     9.77G      6.68M    0       0       0       0
>     TX: bytes  packets  errors  dropped carrier collsns
>     300M       4.18M    5       0       0       0

Ach, kleiner Grashüpfer, Du hast meinen Hinweis nicht verstanden und 
verfälschst die Ausgabe dann auch noch mutwillig. Ich wollte daran 
erinnern, daß ifconfig(8) mittlerweile auch deswegen durch ip(8) ersetzt 
wurde, weil sich die Ausgaben von ip(8) deutlich besser maschinell 
parsen lassen. Wenn Du das "-h" (als Kurzform von "-human" oder 
"-human-readable") mal wegläßt... ach, sieh an, dann kommt da haargenau 
dasselbe heraus wie bei Deinem direkten Lesen von sys.

Sonst noch was? Ach ja: für solche Aufgaben gibt es natürlich bereits 
fertige Software, um derartige Daten zu sammeln und anzuzeigen, etwa die 
Programme sar und sadf aus dem Paket sysstat, die Beats des Elastic 
Stack oder die Software telegraf aus dem InfluxDB-Universum.

von preview (Gast)


Lesenswert?

apropos systemd-run

k.A. xmessage in 10 Sekunden als otto-n;

user@used:$systemd-run --on-active=10 /usr/bin/xmessage hello -display 
0:0
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or other units.
Authenticating as: root
Password:
==== AUTHENTICATION COMPLETE ===
Running timer as unit: run-u63.timer
Will run service as unit: run-u63.service

von preview (Gast)


Lesenswert?

Nur_ein_Typ schrieb:


> verfälschst die Ausgabe dann auch noch mutwillig. Ich wollte daran


Red keinen Müll.

darum gehts
... | grep "RX bytes:" | awk -F ":" '{print $2}' | awk '{print $1}'


Autsch!

von Nur_ein_Typ (Gast)


Lesenswert?

preview schrieb:
> Nur_ein_Typ schrieb:
>> verfälschst die Ausgabe dann auch noch mutwillig. Ich wollte daran
>
> Red keinen Müll.

Tu' ich ja nicht. Du hast das "-h" natürlich bewußt und mutwillig dort 
eingebaut, um die Ausgaben von ip(8) so aussehen zu lassen, als ob man 
damit nicht anständig rechnen könne, um dann mit Deiner Superlösung zu 
reüssieren, aus sys zu lesen. Aber ich hab natürlich Verständnis 
dafür, daß Du jetzt enttäuscht bist, wer wird schon gerne beim Schummeln 
ertappt. ;-)

> darum gehts
> ... | grep "RX bytes:" | awk -F ":" '{print $2}' | awk '{print $1}'

Mir nicht. Bist Du vielleicht ein bisschen fixiert, ja?

von 2aggressive (Gast)


Lesenswert?

preview schrieb:
> lies doch einfach
/sys/class/net/.../statistics/rx_bytes
Passender tipp für mein Problem, danke! Wird von mir natürlich niemals 
in diesem script geändert werden, never touch a lazy dog!


> ... | grep "RX bytes:" | awk -F ":" '{print $2}' | awk '{print $1}'
>
> Autsch!
LOL, ich hatte gewarnt!
Passende Ausrede: beim schreiben des Originals war ich noch "jung und 
schön", heute bin ich nur noch "und".


Neben den lachern und den zu erwartenden autschs und facepalms gings mir 
primär darum für sich ständig wiederholendes getippsel ("") aufzuzeigen:
- ein script im Suchpfad erspart Tipparbeit (Frei nach Ernst: sudo bash 
-c "sleep 123m ; systemctl suspend")
- und leistet womöglich viel mehr (in Anspielung an die statisch 
geforderten 123 Minuten bis Feierabend)


So, endlich Feierabend, auf euer wohl, bleibt gesund, Prost :D

von preview (Gast)


Lesenswert?

Nur_ein_Typ schrieb:
> preview schrieb:
>> Nur_ein_Typ schrieb:
>>> verfälschst die Ausgabe dann auch noch mutwillig. Ich wollte daran
>>
>> Red keinen Müll.
>
> Tu' ich ja nicht. Du hast das "-h" natürlich bewußt und mutwillig dort
> eingebaut, um die Ausgaben von ip(8) so aussehen zu lassen, als ob man
> damit nicht anständig rechnen könne, um dann mit Deiner Superlösung zu
> reüssieren, aus sys zu lesen. Aber ich hab natürlich Verständnis
> dafür, daß Du jetzt enttäuscht bist, wer wird schon gerne beim Schummeln
> ertappt. ;-)
>
>> darum gehts
>> ... | grep "RX bytes:" | awk -F ":" '{print $2}' | awk '{print $1}'
>
> Mir nicht. Bist Du vielleicht ein bisschen fixiert, ja?

Du hast doch einen an der Waffel.

Süß:  formerror_too_many_quoted_lines

mehr Text:
das h steht steht einzig dort, da es aus der shell in welcher es des 
öfteren mal autovervoolständigt aufgerufen wird herauskopiert wurde.

lass es halt weg, brauchtst du einen der Händchen hält?

das ist völlig unerheblich wessen output du parsed

ifconfigs: RX packets 6711825  bytes 9814525554 (9.1 GiB)
oder ips:  9814525554 6711825  0       0       0       0

das ist beides Murks.

von 2aggressive (Gast)


Lesenswert?

Nur_ein_Typ schrieb:
>> Red keinen Müll.
>
> Tu' ich ja nicht. Du hast das "-h" natürlich bewußt und mutwillig
Zankt euch bitte nicht, das löst keine Probleme, ist also für keinen 
Leser interessant.

SCNR:
Jemand sollte dem Andreas, dem Betreiber dieses Forums, die 
Einrichtung eines Subforums benamst "ARENA" vorschlagen. Hätte sicher 
viele rege Teilnehmer :D

von 🐧 DPA 🐧 (Gast)


Lesenswert?

Bezüglich parsen: ip hat übrigens eine --json Option.

von preview (Gast)


Lesenswert?

&#55357;&#56359; DPA &#55357;&#56359; schrieb:
> Bezüglich parsen: ip hat übrigens eine --json Option.

Neuerdings.

uname -v
#1 SMP Debian 4.9.189-3 (2019-09-02)
so alt ist das nicht

ip -V
ip utility, iproute2-ss161212

161212,   2016?

https://manpages.debian.org/stretch/iproute2/ip.8.en.html

vgl.
https://manpages.debian.org/buster/iproute2/ip.8.en.html

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.