bash-script soll sich nach bestimmter zeit beenden

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
meta1501
Beiträge: 37
Registriert: 27.06.2005 14:06:08

bash-script soll sich nach bestimmter zeit beenden

Beitrag von meta1501 » 29.11.2006 15:27:09

hallo,

ich möchte per tcpdump mein netz checken. dies soll über ein shell script funktionieren

gestartet wird es zu gewissen zeiten per cronjob, dass problem ist das beenden des scripts nach einer bestimmten zeit.

gibt es irgendeine einfache methode um das script nach 10min. zu beenden?

hier der ansatz von meinem script:

#!/bin/bash

tcpdump -nn -i eth2 net 192.168.10.0/24 >> netzscan.log




vg
meta[/i]

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Beitrag von Spasswolf » 29.11.2006 15:30:01

Geht bestimmt auch eleganter, aber du könntest einen Cronjob erstellen der den Prozess killt.

meta1501
Beiträge: 37
Registriert: 27.06.2005 14:06:08

Beitrag von meta1501 » 29.11.2006 15:36:15

daran hab ich auch schon gedacht, aber ich wollte es eben "eleganter" haben :D

Benutzeravatar
deadeye
Beiträge: 561
Registriert: 14.04.2004 15:32:18
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Ukio, rechts hinterm Feld
Kontaktdaten:

Beitrag von deadeye » 29.11.2006 15:55:38

Du änderst Dein bashscript folgendermaßen ab:

Code: Alles auswählen

#!/bin/bash

tcpdump -nn -i eth2 net 192.168.10.0/24 >> netzscan.log &

sleep 36000

killall tcpdump
Und rufst das Script dann im Cronjob auch mit einem "&" am Ende auf, sonst hängen die nachfolgenden Cronjobs evtl. noch die 10 Minuten.

Ist ungetestet, müsste aber theorethisch gehen. Allerdings finde ich das jetzt auch nicht so arg viel eleganter als einen zusätzlichen Cronjob, der tcpdump wieder killt.

Und natürlich noch der obligatorische Hinweis, dass Dein Vorhaben evtl. rechtlich nicht ganz sauber ist, wenn Du den Netzverkehr anderer Leute sniffst und auch noch speicherst. Sie sollten zum. Bescheid wissen und ihr Einverständnis geben. Na klar, es wird sicherlich um Dein Heimnetzwerk gehen, wo Papa, Mama und Bruder surfen, aber ich wollts ja nur mal gesagt haben ;-).

Gruß
deadeye

meta1501
Beiträge: 37
Registriert: 27.06.2005 14:06:08

Beitrag von meta1501 » 29.11.2006 16:04:40

super danke!
werde das dann gleich mal ausprobieren, natürlich nicht ohne genehmigung der familie :D

Und rufst das Script dann im Cronjob auch mit einem "&" am Ende auf, sonst hängen die nachfolgenden Cronjobs evtl. noch die 10 Minuten.
meinst du so?

* * * * * /root/netzscan.sh &


thx
meta

Benutzeravatar
deadeye
Beiträge: 561
Registriert: 14.04.2004 15:32:18
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Ukio, rechts hinterm Feld
Kontaktdaten:

Beitrag von deadeye » 29.11.2006 16:10:01

Ja, aber willst Du das wirklich jede Minute starten(* * * * *)?
Ich denke, das ist ein wenig oft, wenn das Script dann jedes Mal 10Minuten läuft ;-).

meta1501
Beiträge: 37
Registriert: 27.06.2005 14:06:08

Beitrag von meta1501 » 29.11.2006 17:15:51

nein war ein tippfehler :wink:

meta1501
Beiträge: 37
Registriert: 27.06.2005 14:06:08

Beitrag von meta1501 » 30.11.2006 10:04:17

das script wurde per cron gestartet, soweit alles in ordnung

das log file wurde auch angelegt, allerdings war es leer.

habe zuvor per hand getestet ob es funktioniert und das hat es auch.

ich habe dann mit ps aux folgendes gesehen:

Code: Alles auswählen

root     15712  0.0  0.2  2692 1208 ?        Ss   10:03   0:00 /bin/bash /root/netzscan.sh
root     15714  0.0  0.0     0    0 ?        Z    10:03   0:00 [cron] <defunct>
root     15715  0.0  0.1  2000  556 ?        S    10:03   0:00 sleep 120
warum wird daraus ein zombie, irgendwelche ideen?

thx

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Beitrag von cosmac » 30.11.2006 15:52:37

je nachdem, was du vorhast, könnte sich tcpdump auch
nach einer bestimmten Anzahl Pakete beenden.
Das wäre jedenfalls sehr elegant.
'man tcpdump' hat geschrieben:-c n
Exit after receiving count packets.
Beware of programmers who carry screwdrivers.

yeti

Beitrag von yeti » 30.11.2006 18:42:47

Vielleicht beginnt jemand nach

Code: Alles auswählen

apt-cache show timeout
zu strahlen?

meta1501
Beiträge: 37
Registriert: 27.06.2005 14:06:08

Beitrag von meta1501 » 01.12.2006 08:37:47

@cosmac:

je nachdem, was du vorhast, könnte sich tcpdump auch
nach einer bestimmten Anzahl Pakete beenden.
da hast du recht darum hab ich das gleich versucht:

Code: Alles auswählen

#!/bin/bash

nohup tcpdump -c 1000 -nn -i eth2 net 192.168.10.0/24 >> netzscan.log &
wieder mit dem ergebnis das es funktioniert wenn ich es per hand ausführe ./netzscan.sh

aber wenn es über einen cronjob gestartet wird tut sich nichts, es wird zwar das netzscan.log angelegt, bleibt aber leer...

so sieht der cronjob aus (die zeiten habe ich gestern zum testen genommen):

Code: Alles auswählen

30,35,40 21 * * * /root/netzscan.sh
vielleicht liegt da der hund begraben?

meta1501
Beiträge: 37
Registriert: 27.06.2005 14:06:08

Beitrag von meta1501 » 07.12.2006 09:50:17

ich konnte das problem lösen :lol:

absolute pfad angabe ist des rätsels lösung:

Code: Alles auswählen

nohup /usr/sbin/tcpdump -c 1000 -nn -i eth2 net 192.168.10.0/24 >> netzscan.log &
und schon geht das teil. wenn der cron das script startet bekomme ich trotzdem zombie prozesse, aber es wird alles so geloggt wie es sein soll - how ever

cheers
meta

yeti

Beitrag von yeti » 07.12.2006 10:13:16

...aber Eines versteh ich nicht: Warum muß es mit nohup und & gestartet werden?

Verkürz doch bitte mal meine lange Leitung...

Benutzeravatar
Pischti
Beiträge: 417
Registriert: 20.02.2002 12:54:18
Wohnort: dresden

Beitrag von Pischti » 07.12.2006 12:57:17

andere ansatz:
mit ulimit kannst du für eine laufende shell deine ressourcen einstellen

Code: Alles auswählen

ulimit -t 60
z.b. veranlasst den kernel, deine shell nach 60 sekunden zu beenden ...
gruss pischti
debian stable

meta1501
Beiträge: 37
Registriert: 27.06.2005 14:06:08

Beitrag von meta1501 » 07.12.2006 15:44:50

aber Eines versteh ich nicht: Warum muß es mit nohup und & gestartet werden?
oh das ist noch drin weil ich zuvor per hand getestet hab und das im hintergrund haben wollte... ist schon weg

Antworten