[linux-l] Anfängerhilfe Script

Boris Kirkorowicz boris-ml07 at kirk.de
Mi Sep 29 20:00:44 CEST 2010


Hallo,

Thomas Kaepernick schrieb:
> ich habe mal soetwas ähnliches für den Internetzugang zu schreiben.

hast Du das noch, zum abgucken?


> Die Werte des Scripts, die erhalten werden sollten habe ich dann
> nach /var/log/MeinUnterverzeichnis schreiben lassen. Auch einzulesende
> Werte habe ich dort in einer Datei vorgehalten.

Was ist der Vorteil dabei?


> Dazu mußt Du dem Benutzer des Scripts das Verzeichnis schenken oder das
> Script mit sudo etc. laufen lassen.

Sudo ist kein Problem, Verzeichnis schenken auch nicht -solange es
einigermaßen sicher ist.


> Am Dienstag, den 28.09.2010, 14:47 +0200 schrieb Boris Kirkorowicz:
>> Ein Script wird in ~/.kde/Autostart abgelegt (natürlich für den User nur
>> r-x), das alle Minute in eine Hilfsdatei schreibt:
>>
>>> if (Logfile von gestern); then
>>>    rm Logfile
>>> fi
>>>
>>> if (Größe von Logfile) > 120; then
>>>    shutdown -h 2
>>> fi
>>>
>>> touch Logfile
> 
> Das brauchst Du nicht unbedingt eine Datei wird angelegt, wenn in sie
> geschrieben wird.

Schon klar, aber dann kann ich chmod nicht drauf loslassen, oder?


>>> while true
>>> do
>>>    sleep 60
>>>    chmod 777 logfile
> 
> Das ist wohl auch nicht unbedingt notwendig. Die Lese- und Schreibrechte
> bekommt sie beim Anlegen automatisch. Und ausführbar muß logfile ja
> nicht sein.

Die Schleife arbeitet ja auch nach dem Anlegen weiter. Zur Bearbeitung
soll das Script in die Datei schreiben können, danach nicht mehr. Als
Attribute würde 666 sicher genügen, eigentlich sogar 600. Ist aber wohl
ziemlich egal, wenn ich mich nicht täusche.


>>>    echo 1 >> Logfile
> Hier würde ich eher damit arbeiten, die Datei als source einzulesen.
> Also
> source logfile
> oder
> . logfile
> 
> Dazu müßte in der Datei z.B. stehen
> TIME=50
> 
> Anschließend rechnest Du in der shell mit dem Wert der Variablen TIME
> TIME=$((TIME+1))
> 
> Danach habe ich dann zur Sicherheit den Wert mit dem Datum
> zurückschreiben lassen.
> 
> DATE=$(date +%Y%m%d)
> sudo echo "DATE=$DATE TIME=\
> $TIME">  /var/log/MeinUnterverzeichnis/${USER}_logfile

Dann steht in der Datei also immer die verbleibende Restzeit? Ja, das
wirkt irgendwie eleganter.


> Dementsprechend brauchst Du oben natürlich nicht die Datei löschen
> lassen, sondern vergleichst den Inhalt von $DATE mit dem aktuellen
> Datum.


> User heute angemeldet?:
> Du benutzt die Umgebungsvariable USER im Dateinamen deiner Logfile
> (s.Bsp.o.) oder schreibst deren Inhalt in die Logfile. Dann mußt Du
> sicherstellen, daß die Einträge jeder Zeile als Variablen einander auch
> wieder eindeutig (oder heißt es eineindeutig :)) zugeordnet werden
> können.

Ansonsten könnte ich die Datei einfach in sein home schreiben. Oder
spricht da etwas dagegen?

Ich habe das jetzt mal wie folgt gemacht:

==============================timectrl.sh==============================
#!/bin/sh
# Fährt den Rechner nach heutiger Höchstzeit in $TIME herunter

# Variablen übersichtlich gleich zu Anfang
logfile="/home/boris/test-log.txt"
TIME=10

# Initiale Dateianlage für den ersten Lauf
if [ -e $logfile ]; then
	echo 'Datei '$logfile' existiert bereits.'
	else
	echo 'Datei' $logfile' wird jetzt angelegt.'
	echo DATE=$(date +%Y%m%d) TIME=$TIME > $logfile
fi

while true
do
	source $logfile
	TIME=$((TIME-1))
	if [ $(date +%Y%m%d) -gt $DATE ]; then
		TIME=10
	fi
	if [ $TIME -lt 0 ]; then
		break
	fi
	DATE=$(date +%Y%m%d)
	echo "DATE=$DATE TIME=$TIME"> $logfile
# die drei Sekunden werden später durch 60 ersetzt
# dauert mir nur zu lange zum Testen... ;-)
	sleep 3
done
echo 'Fertig!'
# sudo /sbin/shutdown -h 5 "Feierabend: speichern und beenden!"
==============================timectrl.sh==============================

Fehlt natürlich noch die Absicherung. Sollte ich das mit
 chmod +w $logfile
 (schreiben)
 chmod -w $logfile
machen, oder geht das anders besser?


> Andere Variante: Schau mal in die manpage von utmp/wtmp. Dort habe ich
> unter SEE ALSO u.a. last und who gefunden. who gibt dir aus welcher User
> auf welchem Terminal wie lange schon eingeloggt ist. last gibt dir alle
> login eines Users seit Bestehen der Datei wtmp aus.

Das sieht aufwendiger aus als das obige. Wäre aber sicher eine gute
Übung zum Parsen. Mache ich vielleicht als zweite Variante, wenn die
erste läuft.



Gruss                    Greetings
       Boris Kirkorowicz

-- 
Falls Ihre E-Mail versehentlich im Spamfilter haengengeblieben zu sein
scheint, bitte das Formular unter http://www.kirk.de/mail.shtml nutzen.
If your eMail seems to be caught by the SPAM filter by mistake, please
use the form at http://www.kirk.de/mail.shtml to drop me a note.



Mehr Informationen über die Mailingliste linux-l