Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]Uruchomienie skryptu w tle.
--AQuatro--
post 3.02.2008, 20:20:47
Post #1





Goście







Witam.
Chciałbym odpalic sobie skrypcik za pomocą :
shell_exec ();
Php, czeka jednak az odpalony program ukonczy dzialanie.
Ja nie chce, aby php czekał, gdyż uruchamiany program może działać długo,
chcę aby odpalił skrypt i nie czekał na jego wynik.
Jak to zrealizować ! ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
1010
post 3.02.2008, 20:23:47
Post #2





Grupa: Zarejestrowani
Postów: 749
Pomógł: 37
Dołączył: 3.10.2006

Ostrzeżenie: (0%)
-----


może iframe niewidoczne?

Rozumiem że chodzi Ci o ukrycie efektu ładowania strony...


--------------------
Go to the top of the page
+Quote Post
Snowak
post 3.02.2008, 22:31:03
Post #3





Grupa: Zarejestrowani
Postów: 78
Pomógł: 2
Dołączył: 13.12.2007

Ostrzeżenie: (0%)
-----


http://php.net/register_shutdown_function

Tam masz wszystko opisane... a w skrócie to ten kod zostanie wywołany dopiero po zakończeniu przetwarzania skryptu. Inaczej (elegancko) nie da rady.

Ten post edytował Snowak 3.02.2008, 22:32:07
Go to the top of the page
+Quote Post
--AQuatro--
post 3.02.2008, 23:44:12
Post #4





Goście







Jakos jednak nie dziala to do konca.
dodałem na końcu kodu:
register_shutdown_function(shell_exec('python moj_program.py'));
I niby odpala program w pythonie.
Tyle, że czekam na zakończenie jego działania, czyli wiele się nie zmieniło.
Czyżbym coś przeoczył. ?
Go to the top of the page
+Quote Post
qrees
post 4.02.2008, 00:16:43
Post #5





Grupa: Zarejestrowani
Postów: 275
Pomógł: 44
Dołączył: 23.11.2007

Ostrzeżenie: (0%)
-----


ignore_user_abort" title="Zobacz w manualu PHP" target="_manual - możesz zamknąć stronę, ale skrypt będzie się dalej wykonywał.
Go to the top of the page
+Quote Post
MrMag
post 4.02.2008, 01:30:58
Post #6





Grupa: Zarejestrowani
Postów: 154
Pomógł: 5
Dołączył: 24.02.2004

Ostrzeżenie: (0%)
-----


spróbuj

  1. <?php
  2. shell_exec("./skrypt > /dev/null");
  3. header("Location: costam.php");
  4. ?>


--------------------
Go to the top of the page
+Quote Post
AQuatro
post 4.02.2008, 08:22:08
Post #7





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 29.09.2004

Ostrzeżenie: (0%)
-----


/dev/null rowniez nie działa.
Takze czekam na wykonanie skryptu.

Ignore user abort, to chodzi chyba o wykonywanie skryptu strony w php ?... a nie dowolnego skryptu uruchomionego na serwerze.
Chyba jedyna nadzieja w register_shutdown_function.
Poczytam o tym jeszcze...
Go to the top of the page
+Quote Post
qrees
post 4.02.2008, 11:54:21
Post #8





Grupa: Zarejestrowani
Postów: 275
Pomógł: 44
Dołączył: 23.11.2007

Ostrzeżenie: (0%)
-----


Cytat(AQuatro @ 4.02.2008, 08:22:08 ) *
/dev/null rowniez nie działa.
Takze czekam na wykonanie skryptu.

Ignore user abort, to chodzi chyba o wykonywanie skryptu strony w php ?... a nie dowolnego skryptu uruchomionego na serwerze.
Chyba jedyna nadzieja w register_shutdown_function.
Poczytam o tym jeszcze...

No to jak uruchamiasz skrypt php na serwerze, to możesz go uruchomić tak:
Kod
php plik.php &

Wtedy skrypt działa w tle.
Go to the top of the page
+Quote Post
MrMag
post 4.02.2008, 12:00:43
Post #9





Grupa: Zarejestrowani
Postów: 154
Pomógł: 5
Dołączył: 24.02.2004

Ostrzeżenie: (0%)
-----


przetestowalem moja wersje i u mnie dziala smile.gif

zobacz sobie w error_log czy nie ma jakis bledow np brak praw dostepu do zrobienia czegos. pamietaj o chmodach

kopiuj
Kod
#!/bin/sh
ping wp.pl >> kopiuj.txt &


kopiuj.php
  1. <?php
  2. shell_exec("./kopiuj > /dev/null");
  3. header("Location: index.php");
  4. ?>


musi to dzialac poniewaz kiedys kopiowalem w ten sposob gigabajtowe pliki.

PS: dlatego kopiuj bo pierwotnie kopiowalem plik, ale to sie dzieje zbyt szybko. lepiej widac to na pingu smile.gif

Ten post edytował MrMag 4.02.2008, 12:06:40


--------------------
Go to the top of the page
+Quote Post
AQuatro
post 4.02.2008, 12:28:13
Post #10





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 29.09.2004

Ostrzeżenie: (0%)
-----


Chm....
Sprawdziłem twój przykład. Również u mnie działa....
Prawdopodobnie kłopot w tym, że przesyłam do pythona jeszcze dodatkowy parametr w postaci ścieżki.
normalnie wyglądało by to tak:
Kod
python nazwa_programu.py sciezka


a w php:
Kod
shell_exec("python nazwa_programu.py ".$sciezka." > /dev/null");

Ale to nie działa.

Nie wiem dlaczego nie działa również opcja:
Kod
shell_exec("python nazwa_programu.py ".$sciezka." &");

Czyli mimo iż na końcu daję symbol odpalenia w tle, to i tak czekam na wykonanie skryptu pythona.

Jedynym rozwiązaniem było by chyba zrobić skrypcik w bashu, tak jak ty zrobiłeś z przykładem pinga, i w nim komendę uruchomienia skryptu pythona w tle.
Tyle, że do skryptu w bashu musialbym przesłać w jakiś sposób scieżkę za nazwą ...
A nie wiem jak bash przechwytuje kolejne parametry po nazwie...

Ten post edytował AQuatro 4.02.2008, 12:30:17
Go to the top of the page
+Quote Post
MrMag
post 4.02.2008, 12:34:13
Post #11





Grupa: Zarejestrowani
Postów: 154
Pomógł: 5
Dołączył: 24.02.2004

Ostrzeżenie: (0%)
-----


pamietam, ze tez mialem problemy z parametrami bo cos nie lykalo. jak to rozwiazesz to daj znac bo wkrotce znow bede musial wykorzystac odpalanie skryptu w tle.

w bashu odwolanie do parametrow: $1 $2 itd.

PS: zdaje sie, ze jak mialem w nazwie pliku jakiekolwiek rozszerzenie to byly problemy. nie jestem tego pewien, ale mozesz sprawdzic.

moze sproobj najpierw utworzyc zmeinna z ciagiem polecen i daj exec na zmiennej?

PS2 winksmiley.jpg jednak lyknelo parametr bez problemu. niestety na pytonie sie nie znam. a to dev null zdaje sie bylo istotne.

Ten post edytował MrMag 4.02.2008, 12:42:25


--------------------
Go to the top of the page
+Quote Post
AQuatro
post 4.02.2008, 15:58:24
Post #12





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 29.09.2004

Ostrzeżenie: (0%)
-----


No, działa.
Ale musiałem zrobić, tak jak zrobiłeś z pingiem.
Osobny plik, skrypt w bashu.
plik.sh
Kod
#!/bin/sh
python nazwa_programu.py $1 &


i w php:
Kod
shell_exec("sh plik.sh ".$sciezka."> /dev/null");


Wtedy zadziała.
Bez basha się nie obejdzie.
Próbowałem nawet zapisać
Kod
shell_exec("python nazwa_programu.py  ".$sciezka." & > /dev/null");

Ale zawsze czeka na wykonanie kodu.
Ale ogólnie, problem rozwiązany..
Dzięki za wszelkie sugestie.

Ten post edytował AQuatro 4.02.2008, 15:59:58
Go to the top of the page
+Quote Post
qrees
post 4.02.2008, 16:06:29
Post #13





Grupa: Zarejestrowani
Postów: 275
Pomógł: 44
Dołączył: 23.11.2007

Ostrzeżenie: (0%)
-----


Czyli tak jak mówiłe, trzeba na końcu dodać &, i skrypt jest wykonywany w tle...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 09:16