Hallo an alle, erstmal möchte ich erwähnen, dass ich von Automatisierung und Scripten keine Ahnung habe, dennoch versuche ich gerade ein Problem zu lösen, was ich ohne fremde Hilfe wohl nicht schaffen kann. Ich suche nach einer Möglichkeit (eventuell via Script) zu überwachen, wie lange bestimmte Programme heute schon gelaufen sind und wenn eine bestimmte Zeit überschritten wurde, sollen sie beendet werden und auch nicht mehr gestartet werden können bzw. wieder beendet werden. Wie sieht es da mit der Performence aus, wenn so eine Überwachung bzw. ständig im Hintergrund läuft? Ist das überhaupt umzusetzen?
Laufzeit von Programmen überwachen und bei Zeitüberschreitung beenden
Anmeldungsdatum: Beiträge: 112 |
|
||||
Projektleitung
Anmeldungsdatum: Beiträge: 12829 |
Spontan fallen mir zwei Lösungen ein:
|
||||
Anmeldungsdatum: Beiträge: 824 |
Mir kam beim Lesen der Fragestellung der Begriff "Kindersicherung" in den Sinn, siehe Wiki Kinder Nutzungszeit. |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 112 |
Ja den Artikel mit der Kindersicherung hatte ich mir schon durchgelesen, leider wird dort nicht exakt das behandelt was ich suche. Eine komplette Abmeldung des Benutzers via pam time oder Timekpr kommt nicht in Frage. Aus euren bisherigen Antworten schließe ich, dass es per Skript nicht umzusetzen wäre? |
||||
Projektleitung
Anmeldungsdatum: Beiträge: 12829 |
|||||
Anmeldungsdatum: Beiträge: 17552 Wohnort: Berlin |
Die Hauptfrage ist wohl, ob man es mit einem Kind zu tun hat, das sich möglicherweise auf die Suche macht, das Skript auszuhebeln. Wenn das Skript 1x in 4 Wochen abstürzt und seinen Wächterfunktionen nicht wie erwünscht nachkommt ist das wohl verschmerzbar und der Aufwand, es weiter abzusichern, die Mühe nicht wert. Wenn man es es nicht verbockt, sondern eine Pause einlegt von einer Sekunde oder einer Minute, dann fällt die Laufzeit des Skripts und sein Speicherverbrauch wohl nicht ins Gewicht. Ich kenne von mir selbst die Sorge, dass 3600 Kontrollen pro Stunde ja ganz schön viel ist, aber für das System ist es ein Klacks. Angenommen man wollte überprüfen, ob der Firefox läuft und das 1x pro Minute abfragen. Der Anwender könnte dann immer wieder FF starten, 59 Sekunden lang nutzen, und kurz vor der Prüfung killen - angenommen er würde rausfinden, zu welcher Sekunde das Skript triggert. Das würde das Surfen schon so verleiden, dass es wohl kaum jemand mehr als 3 Minuten auf diese Weise auszutricksen versuchte. Jetzt können wir noch prüfen, wie hoch die Belastung einer solchen Kontrolle ist. Wir schreiben eine Schleife, in der wir so schnell wie möglich prüfen, ob FF läuft, einen Zähler hochzählen, prüfen ob eine ganze Sekunde vergangen ist, wenn nein laufen wir die Schlaufe noch mal durch. Wenn ja geben wir den Zähler aus. Währenddessen sollte der Rechner etwas belastet werden, vielleicht einen Browser mit 10 Tabs offen haben und in einem davon ein Video spielen. Da der Rechner aber immer Eingabeströme puffert und nicht gleichmäßig belastet ist, sondern in vielen, kleinen Spitzen, messen wir vielleicht besser eine Minute lang und teilen durch 60. Im richtigen Programm fügen wir zwischen den Kontrollen aber ein sleep 1 ein, um zwischen zwei Messungen den Prozess schlafen zu legen, so dass die CPU andere Sachen machen kann, und nicht dem Messen so viel Zeit wie möglich spendiert. Bekommst Du das alleine hin? |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 112 |
Ich versuch's ☺ Ich arbeite mich gerade in Skripting ein und melde mich für Verbesserungsvorschläge und Fragen wieder, wenn ich etwas vorzuweisen habe. |
||||
Anmeldungsdatum: Beiträge: 17552 Wohnort: Berlin |
Hilfreich könnten folgende Befehle sein:
|
||||
Projektleitung
Anmeldungsdatum: Beiträge: 12829 |
Oder auch für die Laufzeit
|
||||
Anmeldungsdatum: Beiträge: 983 |
|||||
Anmeldungsdatum: Beiträge: 983 |
Hallo,
Das ist eine Frage, aber kein Problem, sondern eine Chance. Es gibt keine bessere Belohnung mit der man winken kann, als dass das Kind Mami und Papi austricksen kann, wenn es sich bemüht. Selbstredend gilt das nicht für wichtige Dinge, wie die Absicherung der glühenden Herdplatte. Außerdem ist das gute alte Ingenieurstradition Skripte erst einmal irgendwie zusammenzukugeln und dann fallweise zu korrigieren, wenn es Ooops! macht. Auch da ausgenommen die Steuerung von Kernkraftwerken, Raketen etc.. Da hat Joseph Weizenbaum schon recht. Gruß, Gerald |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 112 |
Hallo an alle, so nachdem ich nun etwas Zeit gefunden habe mich damit zu befassen habe ich an 2 Nachmittagen folgendes Skript erstellt:
Das Skript überprüft in einer Dauerschleife, ob ein bestimmtes Programm (in dem Fall Firefox) geöffnet ist, und falls ja, zählt es die Zeit zusammen. Das ganze wird immer für x-Sekunden von Sleep unterbrochen. Habe ich das richtig verstanden, dass das Skript während der Sleepzeit keine Ressourcen in Form von CPU Auslastung verbraucht? Die Zeit wird außerdem noch in eine Datei eingetragen und beim Start des Skripts wird die Datei geladen und wieder diese Zeit benutzt, solange es der selbe Tag ist. Das soll dafür sorgen, dass man die Zeit nicht durch einen Neustart wieder zurücksetzen kann. Das ganze hat sicher noch Verbesserungspotential, wenn also jemand weiß was man noch besser machen kann, immer her damit ☺ Eins kann ich aber aus meiner Erfahrung der letzten Tage damit sagen: Niemals ein solches Batchskript anfangen in Windows zu schreiben und dann versuchen die Datei einfach so ins Linuxsystem zu kopieren... Im Prinzip funktioniert das so, aber ich brauche noch Hilfe, wie man das ganze nun ab Systemstart und im Hintergrund zum Laufen bekommt. Einfach in crontab eintragen @reboot? Jedenfalls wenn ich das Skript via SSH starte und die SSH-Sitzung beende, ist auch das Skript gleich wieder beendet. |
||||
Anmeldungsdatum: Beiträge: 983 |
|||||
Anmeldungsdatum: Beiträge: 11179 Wohnort: München |
Es hängt ja nicht zuletzt davon ab, was man haben will... - aber man könnte das Skript kürzer machen, die Zeiterfassung verbessern (ein Schleifendaurchlauf mit einem
Oder einen brauchbaren Editor unter Windows verwenden, der Unix-Zeilenenden ('\n' statt '\r\n') beherrscht ☺
In welchem Kontext soll das denn laufen? Wenn es nur für einen bestimmten User gelten soll (der brav genug ist, dass er die Ausführung des Skripts nicht unterbricht), würde ich das in seinen Autostart stecken. Als "Kindersicherung" würde ich es eher als root starten - dafür könnte man z.B. eine Systemd/Unit /etc/systemd/system/ff_watchdog.service nutzen:
Und die muss man dann noch aktivieren und einmalig starten (passiert dann ab dem nächsten Boot-Vorgang automatisch): sudo systemctl enable ff_watchdog.service sudo systemctl start ff_watchdog.service Da das Skript nicht prüft, welcher Nutzer den Firefox ausführt, kumuliert sich natürlich die nicht-überlappende Laufzeit aller Firefox-Prozesse.
Wenn du Programme über eine SSH-Sitzung hinaus ausführen willst, kannst du z.B. nohup verwenden. Oder du nutzt einen Termial-Multiplexer wie screen oder tmux, der dafür sorgt, dass die Sitzung nicht beendet wird, wenn du die SSH-Verbindung trennst. |
||||
Anmeldungsdatum: Beiträge: 2123 Wohnort: Gelsenkirchen |
Als Hinweis an Zottel83: Ich komme mit gedit auch unter Windows ganz gut zurecht. Beim Speichern ist dort UTF-8 und Linux-Zeilenenden der Standard. Das gibt es hier vorkompiliert für 32-bit und 64-bit Systeme und es läuft unter Windows 10 bei mir ohne Probleme. |