Archiv verlassen und diese Seite im Standarddesign anzeigen : Script im Hintergrund
hallo, ich würde gerne folgendes Script im Hintergrund laufen lassen können, was bis jetzt nicht geht. Sonst funktioniert es.
Danke Frank
#!/usr/bin/expect -f
#if {[fork]!=0} exit
#disconnect
spawn -noecho tail -n 0 -f /var/log/messages
while "1" {
expect {
"####P O R T S C A N####" {
send_user "[timestamp -format %c] portscan started \n"
if {[catch {exec /root/portscann} error]} {
send_user "[timestamp -format %c] $error \n"
} else {
send_user "[timestamp -format %c] portscan finished \n"
}
}
}
}
[ 12. September 2001: Beitrag editiert von: Frank ]
mightymike99
12-09-2001, 21:18
Hi,
nohup deinscript &
Gruß
fork
habs probiert und dann isses so wie immer, wenn ich strg+c drücke (muss ich ja um weiter auf er Komanndozeile arbeiten zu können) beendet sich das Script
[root@Frankux root]# nohup deinscript & ./portdetect
[1] 4798
nohup: appending output to `nohup.out'
[1]+ Exit 127 nohup deinscript
--
Frank
[ 12. September 2001: Beitrag editiert von: Frank ]
marcdevil
13-09-2001, 09:47
wieso Strg C ? wenn was mit & gestartet wurde kannst du normal weiterarbeiten.
Strg c beendet ein script
Strg z setzt die shell in den vordergrund
"bg" schickt die dadurch pausierten prozesse in den hintergrund
befehl& startet befehl und schickt es sofort in den hintergrund.
alle im hintergrund befindlichen prozesse geben ihren output trotzdem weiterhin auf die shell aus, was diese dadurch aber nicht blockiert.
Das ist schon richtig ... nur wenn ich mich auslogge beendet sich der Process dann auch.
Ich möchte schlicht nichts weiter erreichen als das dieses Script schon beim booten gestartet wird und im Hintergrund läuft.
Mit strg+z und bg läuft das leider nicht.
--
Frank
marcdevil
14-09-2001, 07:50
das hattest du vergessen zu erwaehnen.
strg z und bg macht man ja nur, wenn man im nachhinein den letzten befehl auf der shell lieber mit & starten wollte.
also du traegst in /sbin/init.d/boot.local dein script mit & ein. wenn du was anderes als suse hast musst du erstmal dein bootscript suchen.
wieso versteht mich denn keiner *heul
wie man Sachen per booten startet ist doch klar, hier geht es um die Funktionalität an sich erst ma.
Dank Frank
Hi,
willst Du, daß Dein Script als Dienst im Hintergrund läuft?
Dies sieht mit der while-Schleife so aus, bin aber leider noch kein Scriptfachmann.
Dein Problem verstehe ansonsten eigentlich auch nicht (sorry). Wenn es laufen soll ohne das es durh Ausloggen unterbrochen wird, kannst Du es doch nur beim Booten oder z.B durch den Cron starten lassen, oder?
Nebenbei, was macht das Scirpt eigentlich?
Grüße,
Werner
Moin
es überwacht das Syslog auf neue Zeilen wo Portscan drin vorkommt. Die Zeilen selber erzeugt ne Logfunktion von Iptables.
also wenn ich ./portdetect mache passiert nichts weiter als es läuft aber die Bashzeile sich genauso verhält als wenn ich ein tail -f /var....messages mache was ich ja auch nur mit strg+c beenden kann
--
Frank
Matzetronic
17-09-2001, 07:45
hi,
ich verstehe, was du meinst. ich habe mir hier auch ein script geschrieben, welches ca. 15 mins läuft.
und ich kann es leider nicht in den hintergrund schicken, es wird immer terminiert. aber irgendwie muss das gehen, hat denn niemand ne lösung ?
mfg
matze
Hi,
hier ungetestet ein Vorschlag für solch einen Dienst. Allerdings als ksh-script :-)
#!/bin/ksh
while true
do
.... (Dein Script)
sleep 100
done
Das ergibt eine Endlosschleife.
Mit einem anderen Script vielleicht noch die existens überprüfen und das könnte es sein, oder?
Grüße,
Werner
Macht erstma nen guten Eindruck, nur beschwert er sich über
syntax error at line 14: `}' unexpected
habs so eingetragen
#!/bin/ksh93
while true
do
#!/usr/bin/expect -f
#if {[fork]!=0} exit
#disconnect
spawn -noecho tail -n 0 -f /var/log/messages
while "1" {
expect {
"####P O R T S C A N####" {
send_user "[timestamp -format %c] portscan started \n"
if {[catch {exec /root/portscann} error]} {
send_user "[timestamp -format %c] $error \n"
} else {
send_user "[timestamp -format %c] portscan finished \n"
}
}
}
}
sleep 100
done
mightymike99
17-09-2001, 21:23
Hi Frank,
jetzt schmeisst Du aber boes was durcheinander. das was du als erstes geschickt hast war ein script das mit einem expect-Interpreter verarbeitet wird. Das kannst du nicht einfach der ksh(auch ein Interpreter) hinwerfen.
Entweder du rufst das expect-Script aus deinem ksh-script auf oder du erweiterst dein expect script mit expect-spezifischen Schleifenbefehlen(danach frag mich bloss nicht)
Also erstere Methode ist die einfachere:
while : # Doppelpunkt entspricht true
do
myexpectscript
sleep 100
done
Gruß
fork
P. S. Du solltest auch mal schauen ob bei Dir expect ueberhaupt installiert ist(rpm -qa | grep -i expect)
[ 17. September 2001: Beitrag editiert von: fork ]
Soory eben versteh ich nur Bahnhof ... wie meinste das genau ?
Hallo,
was Frank meint, ist, daß Dein Script nicht in der ksh-umgebung läuft. Es ist deshalb notwendig aus dem "Dienst-Script" das eigentliche "Expect-Script" aufzurufen.
Du hast also zwei Dateien, die Zweite heißt in seinem Beispiel "myexpectscript".
Grüße,
Wernr
Ok danke, habs jetzt richtig gemacht.
Aaaaber es ensteht wieder derselbe Effekt. Komme nur über Strg-c wieder an meine Konsole und das Scrip beendigt sich damit
marcdevil
18-09-2001, 15:17
wenn dein script beim booten im hintergrund laeuft blockiert es keine Konsole.
ansonsten probiere mal:
xterm -e sh -c deinscript &
wenn du ohne X arbeitest, dann hilft nur mit AltF2 zum zweiten Terminal zu wechseln.
Ja ich arbeite ohne X
Zudem auch nicht lokal sondern über SSH
es muss doch möglich sein so ein Script in den Hintergrund zu schicken ohne das es sich beedet oder wenn es im Hintergrund ausgeführt wird. Praktisch wie so ne Art Demon
Hi,
also das verstehe ich jetzt nicht mehr. Ich hätte gedacht, daß das Script einmal gestartet im Hintergrund läuft.
Ich würde event. die beiden Dateien auf den entfernten Rechner kopieren (scp) und dann dort die Dienst-Datei mit ssh starten:
ssh -l user "entfernter Rechner" dienst-datei
bei mir läuft so ein ping durch, wenn in der "dienst-datei" folgender Inhalt steht:
#!/bin/ksh
ping www.meine-domaine.de (http://www.meine-domaine.de) &
Vielleicht hilft Dir das,
Grüße,
Werner
danke für den Vorschlag nur leider das selbe Ergebnis.
Hi,
was heißt das,
Du loggst Dich anschließend ein zweitesmal ein und der Dienst ist nicht am laufen
ps -ax|grep "dienst-script"?
Soll den das Script dauernd laufen oder nur dann wenn Du es möchtest?
Wenn dauernd, bau eine Abfrage am Anfang vor der While-Schleife ein,
ps -ax|grep "dienstedatei"
[ $? == 0 ] && exit 0
der die Existenz prüft. Wenn das Script läuft, wird über exit abgebrochen. Wenn nicht wird die While-Schleife gestartet. Dann das ganze noch in den Cron und dann läufts.
Grüße,
Werner
hab ich eingefügt
ps -ax|grep "dienstedatei"
[ $? == 0 ] && exit 0
kommen tut dann
invalid command name "ps"
while executing
"ps -ax|grep portdetect"
(file "./portdetect" line 3)
Wie wäre es denn der Einfachheit halber wenn du das script mal auf deinem Rechner ausführst ? Ja es soll andauernd im Hintergrund laufen auch wenn ich mich auslogge
hi,
obwohl ich ex immer noch nicht verstehe, was Dein Script macht, habe ich expect installiert, die beiden Dateien erzeugt:
also Deine als portscan.rc
und eine ksh.ksh
#!/bin/ksh
while true
do
/root/batches/test-expect/portscan.rc
echo "test" >>/root/batches/test-expect/echo.txt
sleep 100
done
Dann folgendes gemacht und bekommen:
linux:~/batches/test-expect # ./ksh.ksh &
[3] 23903
linux:~/batches/test-expect # ps -ax|grep portscan.rc
23904 pts/5 S 0:00 /usr/bin/expect -f /root/batches/test-expect/portscan.rc
23909 pts/5 S 0:00 grep portscan.rc
linux:~/batches/test-expect #
Auch die echo.txt wird erzeugt.
Wenn die portscan abgebrochen wird, wird erst ein Eintrag in der echo.txt erzeugt.
Jetzt habe ich noch weiterprobiert.
Auch Deine Datei läuft bzw. gibt die Konsole frei, wenn man sie mit portscan.rc & aufruft.
Jetzt weiß ich irgentwie auch nicht mehr weiter.
Grüße,
Werner
Ok. sie macht folgendes ...
die datei portdetect überwacht die /var/log/messages auf den NEUESTEN Eintrag. Dieser Eintrag ist eine Zeile in der ####P O R T S C A N#### vorkommt. Sobald eben dieser Eintrag erscheint wird die Datei "portscann" ausgeführt in der steht "echo test | mail -s PORTSCANN frank"
Und das ganze soll eben andauerndlive, im Hintergrund ablaufen. Was es ja auch tut.
Nur klappts eben im Hintergrund nicht und wenn ich mich auslogge. Wäre es nicht am einfachsten das Script so zu schreiben das es wie andere auch funktioniert wo man zb nur /etc/ini.d/named start und so weiter machen braucht ?
Hi,
jetzt habe ich erstmal über Dein Problem länger nachgedacht, aber bin immer noch nicht auf die richtige Spur gekommen.
Den Vorschlag von Dir, ein Script wie /etc/named usw zu schreiben, kannst Du, glaube ich vergessen. Diese rufen nur Dienste auf und beenden sich dann wieder.
Möglicherweise hast Du ein Problem mit Deinem Script, bzw. damit was es tun soll und tatsächlich tut.
Es läuft bei mir nämlich im Hintergrund, wenn ich es mit "script &" aufrufe. Nur ob es etwas tut oder nicht, konnte ich nicht ermitteln. Aber da ist es :-) .
Zum überprüfen könntest Du doch eine andere Datei (statt /var/log/messages ) benutzen, in die Du einfach mit echo etwas reinschreiben kannst, ohne Unheil anzurichten.
Wo kommt denn das Portscan in der /var/log/messages her? Aus der Firewall? Gibt es da nicht andere möglichkeiten, auf bestimmte Vorfälle zu reagieren?
Grüße,
Werner
Hi danke das dich mein Problem interessiert, ich such echt schon ne Weile nach ner Lösung
Ja es kommt aus der Firewall. Is ne ganz normale Log Funktion von Iptables wo im Falle eines Portscans gegen mich ein Eintrag in der messages erscheint.
Diesen kann man nun mit nem Script auslesesen, wenn er erscheint und der neueste is (sonst krieg ich ja jedesmal zig mails ;-) und das wars schon.
Klar kannst du es dir installieren lass das Script einfach nach nem anderen Eintrag als "####P O R T S C A N####" suchen bei dir in der messages suchen, zb cron startet oder sowas.
Hi,
ich habe Dein Script verändert, so daß es eine andere Datei überwacht und in diese den erwarteten Eintrag geschrieben. Dann schmeist Dein Script haufenweise Fehler raus.
Warum weiß ich nicht.
Warum läßt Du Dir nicht gleich ein Script ausführen von iptables, wenn Du einen Portscan vermutet und sperrst gleich auch noch die ip-Adresse vom Sender? Geht das nicht?
Grüße,
Werner
nein geht nicht, einzig das er Portscanns mitloggt wenn ich das möchte. Aber jetzt sachmal das kann doch nicht so schwierig sein die zu überwachen und bei vorkommen ne Aktion auszuführen. ZB ala dynamische IP wenn die sich ändert nen Ftp upload zur Webseite machen. Das geht doch hab ich gelesen, ist das nicht das selbe Prinzip ?
Goldfinger
21-09-2001, 21:01
Servus,
ich habe das ganze nur kurz überflogen und nicht alles sauber durchgelesen.
Aber wie wärs wenn du das ganze als cronjob laufen lässt?
Da kannst Du bequem einstellen das alle 15 Minuten das script gestartet wird.
Ohne Probleme wer eingeloggt ist oder mit X oder ohne X.
Aber wie gesagt ich habe den Tread nicht genau durchgelesen.
So jetzt wird wieder weitergesurft :))
Ginge schon nur das Problem ist wie wer_ner auch schon festgestellt hat das sobald es im Hintergrunf läuft und ein Portscan kommt, beedet es sich komischerweise
Hi,
ich glaube, das Dein Script _nicht_ richtig läuft. Der Effekt, das es abbricht, wenn es in Aktion treten soll, war bei meinen Versuchen derselbe.
Grüße,
Werner
habs doch hingekriegt ...
nohup ./portdetect &
931 ? SN 0:00 /usr/bin/expect -f /root/portdetect
danke für die Mühe ... ich meine ganz sauber klingts nicht aber es läuft
Oliver@Home
24-09-2001, 20:56
hy,
hast du ein "exit" am schluss in dein script eingebaut? :confused:
gruss
oliver
Hallo Frank!
Versuche mal dein Script mit "at now deinscript" zu starten.
"at now" startet einen Batch Job d.h. Du kannst Dich ausloggen und Dein Script läuft im bg weiter.
Grüsse
Toro
Hallo Frank!
Starte Dein Script mal mit "at now deinscript". "at now" startet dein Script als
Batch Job d.h. Du kannst Dich ausloggen und das Script läuft weiter.
Grüsse
Toro
Oliver nur zur Info auch UNIX kennt das at Kommando!!!!
G.
Toro
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.