befehle aus datei ausführen

uzumakinaruto

uzumakinaruto

Tripel-As
Hi,

ich erstelle mit einem PHP-Script Befehle die dann auf der Consoel ausgeführt weden sollen.

wenn ich die datei mit exec ausführen lasse sehe ich wie er anfängt, aber die screens wieder terminiert ohne die aufgabe abgearbeitet zu haben.

z.b.
Code:
screen -S debian_image wget 'http://cdimage.debian.org/debian-cd/5.0.3/i386/iso-dvd/debian-503-i386-DVD-1.iso'

Code:
file="/path/to/file.sh"
exec $file

am ende wäre es auch noch schön wenn er die abgearbeiteten dateien gleich aus der textdatei löschen würde, damit sie beim nächsten durchlauf des cronjobs nicht erneut runtergeladen werden.

danke schonmal im voraus
 
Hi,

führst du das PHP-Script per Console aus oder via Webserver?

Falls es über einen Webserver läuft würde ich auf "max_execution_time" tippen.
Also die Zeit die ein PHP-Script laufen darf bevor es gekillt wird.

mfg
HeadCrash
 
das problem liegt nich bei php.

php füllt die textdatei mit linux commands, das war es.
jetzt soll ein shell-script die textdatei auslesen und die commands ausführen.

ich möchte nicht mit php übern webserver auf der console arbeiten .. mir zu unsicher und ich will den apachen nicht umbiegen das er in den anderen verzeichnissen rumspielen darf
 
Okay das hab ich ein bisschen falsch verstanden. Der Befehl exec hat mich irgendwie an php-Code denken lassen.
 
Wenns dir darum geht etwas runterzuladen versteh ich nicht, wieso du nicht

Code:
wget -c -b $url

verwendest.

Wenn du das ganze aus einem cron job ausführst könnte es auch sein, dass er probiert die datei mit /bin/sh auszuführen, was uu mit der syntax nicht hinhaut. Probier doch vllt einmal

Code:
/bin/bash $filepath

Ich hab zwar screen nicht installiert, weil ich doch lieber mein genome-terminal hab, aber sollte dein Befehl nicht screen im fordergrund halten? Wenn das so ist kannst du das abwürgen unter Umständen unterbinden, wenn du screen in den hintergrund schiebst.
 
ich will das ganze ja auf einem server nutzen ohne X.
und es gibt unbedarfte benutzer hier die einfach nur eine url ins formular eingeben sollen und dann soll auf dem server im hintergrund die datei runtergeladen werden.
unter umständen auch gleich mehrere dateien gleichzeitig.
mir ist da eigentlich nur screen bekannt das mir diese möglichkeit bietet.

wenn ihr andere "tools" kennt, immer her damit.

achso .. wenn ich den code (eine zeile) direkt auf der console ausführe funktioniert das einwandfrei .. er bleibt zwar im screen drinne .. aber er läd die datei runter
 
Hast du schon mal die Parameter
-dmS name Start as daemon: Screen session in detached mode.
versucht?
 
Also der VDR (als ich das benutzt habe) hat immer die Befehle über "atd" ausgeführt. Also einfach mit "at ..." einen Befehl an der atd geschickt, und dieser hat den Job im Hintergrund ausgeführt. Der Vorteil hier, ist dass der at Befehl sofort zurückkommt.

Wäre also eine Überlegung Wert.

Grüße,

Asturio
 
also ich habe es jetzt endlich geschaft. (zumindest eine zeile)

mit zwei zeilen werde ich morgen testen, entweder es klappt oder es klappt nicht.
dann werde ich mit einer for-schleife ran müssen und dann diese zeile irgendwie ausgeführt bekommen (exec macht ditte nicht, oder ich habe den parameter nicht gefunden)

ich hatte zum einen zeichen probleme in der datei (%0D) und zum anderen hatte ich einfach nur screen -S name wget 'http...' gemacht.

nachdem ich screen -d -m -S ... gemacht habe, hat das mit screen geklappt.

jetzt wäre es natürlich auch noch schön das dann beim fertigen download der screen terminiert wird und die zeile aus der textdatei gelöscht wird.
 
Die frage ist nach wievor noch irgendwie im Raum wieso ausgerechnet screen dafür verwendet.

Im Grunde genügt doch ein ganz normaler wget-Aufruf wie in marcellus oben beschrieben hat. Du kannst wget auch eine Datei mit Links vorwerfen die er nacheinander abarbeitet.

mfg
HeadCrash
 
Und: wget -c kann unterbrochene Downloads wieder aufnehmen, und weiter downloaden. Soll die Datei fertig runtergeladen sein, macht er nichts.

Ein Tipp: Bei twitter gibt es den "scriptfu" Mensch. Der gibt immer interessante Script-Tipps.

Grüße

Asturio
 
nacheinander ist aber nicht das was ich brauche, sondern gleichzeitig und sehr zeitnah, da die downloads schnell "weg" sind.

an sich müsste ich SOFORT nach dem der benutzer gesagt hat "runterladen" die datei runterladen .. sagt 2 min user 2 auch runterladen, dann sollte die 2. datei auch runtergeladen werden.
mir fällt dazu nur wget mit screen ein .. oder übersehe ich da etwas?
 
Du kannst weget auch einfach in den Hintergrund schicken und pro download eine instanz von wget laufen lassen. Damit hast du alle downloads parallel laufen, schneller wirds nicht.
 
Wenn du nur ne Datei runterladen willst, warum dann überhaupt Shell?
 
at könnte das Problem lösen

nacheinander ist aber nicht das was ich brauche, sondern gleichzeitig und sehr zeitnah, da die downloads schnell "weg" sind.

an sich müsste ich SOFORT nach dem der benutzer gesagt hat "runterladen" die datei runterladen .. sagt 2 min user 2 auch runterladen, dann sollte die 2. datei auch runtergeladen werden.
mir fällt dazu nur wget mit screen ein .. oder übersehe ich da etwas?

Wie gesagt, "at" kann eventuell helfen. Einfach
echo "Befehl" | at NOW
z.B.
echo "touch /tmp/hallo-welt" | at NOW
oder
echo "wget http://www.google.de -O $HOME/google.html" | at now

Das ausführen des Befehls macht dann der "atd".

Oder mit heredocs arbeiten was noch cooler ist:

at NOW << EOD
touch /tmp/vor-dem-download
wget http://www.google.de -O /tmp/google.html
touch /tmp/nach-dem-download
EOD

Dann macht er den touch, dann ein download und dann wieder ein touch. Also schon praktisch.

Eigentlich ist das ding gedacht, um Befehle später auszuführen, um zum Beispiel erst ab 00:00 einen Download zu starten, oder einen Ausdruck im Rechenzentrum morgen früh zu starten, damit er fertig ist, wenn am in der Arbeit ist.

Grüße
 
weil die dateien auch mal größer sein können (dvd images, etc) und das dann der server übernehmen soll.
wenn wget mehrere instanzen zur gleichen zeit erlaubt werde ich mir mal diesen weg anschauen .. dann habe ich es nicht das der scree nwieder gelöscht werden muss.

at ist doch eine art cron oder? zumindest sieht das so aus .. da kann ich eigentlich auch bei einem shell-script und cron bleiben .. dann habe ich es immerhin einheitlich.
 

Ähnliche Themen

Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

Java Development Kit Installation

Zurück
Oben