Creshal schriebman bash 🙂 Arithmetik und Tests laufen in der Shell etwas anders als in vernünftigen Sprachen.
schreibs einfach in python das ist leichter verständlich^^
Creshal schriebman bash 🙂 Arithmetik und Tests laufen in der Shell etwas anders als in vernünftigen Sprachen.
#! /usr/bin/env python
import os
import time
uploadarray=[0,0,0,0,0,0,0,0,0,0,0] #liste für die uploadraten
downloadarray=[0,0,0,0,0,0,0,0,0,0,0] #liste für die downloadraten
tempup=0 #der gesamtdatenupload vor einer minute
tempup2=0 #der gesamtdatenupload aktuell
tempdown=0 #download vor einer minute
tempdown2=0 #download aktuell
totaltraffic=0 #gesamttraffic (up/down) der letzten zehn minuten
border=5000000 #grenzwert für traffic
shutdown=0
while true:
#schiebt die werte der letzen zehn minuten eins weiter und speichert in i=0 den aktuellen wert
for i in range(9,0,-1):
uploadarray[i]=uploadarray[i-1]
tempup2=tempup
tempup=os.system("cat /sys/class/net/enp3s0/statistics/tx_bytes")
uploadarray[0]=tempup-tempup2
for i in range(9,0,-1):
downloadarray[i]=downloadarray[i-1]
tempdown2=tempdown
tempdown=os.system("cat /sys/class/net/enp3s0/statistics/rx_bytes")
downloadarray[0]=tempdown-tempdown2
#speichert totaltraffic für up/down der letzten zehn minuten
uploadarray[10]=0
downloadarray[10]=0
for i in range(0,10,1):
uploadarray[10] += uploadarray[i]
downloadarray[10] += downloadarray[i]
totaltraffic=uploadarray[10]+downloadarray[10]
print(totaltraffic)
#überschreitet der totaltraffic nicht den grenzwert, wird der computer in 10 minuten heruntergefahren
if totaltraffic < border:
os.system("shutdown 10")
shutdown=1
#überschreitet der totaltraffic innerhalb dieser 10 minuten den grenhzwert, wird der shutdown #abgebrochen
if totaltraffic > border and shutdown=1:
os.system("shutdown -c")
shutdown=0
time.sleep(60)
nur scheinen da fehler in der syntax. zumindest bekomme ich, sofern ich das ganze ausführen will, den fehler: kommando nicht gefundendownload[0] - download[9] + upload[0] - upload[9]
Zwar stimmen die werte dann in den ersten 10 Minuten nicht, aber das ist ja egal da du sowieso erst nach 10 Minuten herunterfahren willst. Also so würde ich das machen, (allerdings in bash):
#!/bin/bash
iface="enp3s0"
limit=5000000
while :; do
rx=( "$(< /sys/class/net/${iface}/statistics/rx_bytes)" ${rx[@]:0:9} )
tx=( "$(< /sys/class/net/${iface}/statistics/tx_bytes)" ${tx[@]:0:9} )
total=$((rx[0] - rx[9] + tx[0] - tx[9]))
if [ $total -lt $limit ]; then
shutdown 10
else
shutdown -c
fi
sleep 60
done
Den Fehler in deinem Skript sehe ich nicht, ich kann aber auch kein python.
#!/bin/bash
iface="enp3s0"
limit=5000000
while :; do
user="$(< /tmp/userloggedin)"
rx=( "$(< /sys/class/net/${iface}/statistics/rx_bytes)" ${rx[@]:0:9} )
tx=( "$(< /sys/class/net/${iface}/statistics/tx_bytes)" ${tx[@]:0:9} )
total=$((rx[0] - rx[9] + tx[0] - tx[9]))
if [ $total -lt $limit ] && [ $rx[9] != 0] and [$user != 1]; then
systemctl suspend
sleep 60
fi
done
dann bekomme ich den fehler./suspendifnotraffic: Zeile 13: [: Fehlende `]'
was stimmt denn nun wieder nicht?rx_start="$(< /sys/class/net/${iface}/statistics/rx_bytes)"
tx_start="$(< /sys/class/net/${iface}/statistics/rx_bytes)"
for i in {0..9}; do
rx[i]=rx_start
tx[i]=tx_start
done
while ...
Das musst du aber eigentlich nicht machen. In den ersten 10 Minuten wird, wenn duDu musst auf Leerzeichen achten in Shellskripts:a.r.c.h.y schrieb dann bekomme ich den fehler
was stimmt denn nun wieder nicht?./suspendifnotraffic: Zeile 13: [: Fehlende `]'
[ $rx[9] != 0 ] && [ $user != 1 ];
Der Test auf $rx[9] != 0 ist übrigens überflüssig, weil rx[9] niemals 0 sein wird.
#!/bin/bash
iface="enp3s0"
limit=5000000
echo 0 > /home/.userloggedin
i=0
while :; do
user="$(< /home/.userloggedin)"
rx=( "$(< /sys/class/net/${iface}/statistics/rx_bytes)" ${rx[@]:0:9} )
tx=( "$(< /sys/class/net/${iface}/statistics/tx_bytes)" ${tx[@]:0:9} )
total=$((rx[0] - rx[9] + tx[0] - tx[9]))
if [ $total -lt $limit ] && [ $user != 1 ] && [ $i -lt 11 ]; then
systemctl suspend
else
i=$((i+1))
fi
sleep 60
done
Vielen Danke! vor allem @portix !!!echo 0 > /home/.userloggedin
und
user="$(< /home/.userloggedin)"
ist dann nicht sowieso [ $user != 1 ]
?