php bash komut dosyalarını çalıştıran

3 Cevap php

Ben iki bilgisayar var. Ilk bilgisayarda apache hepsi benim web kodu ile çalışıyor olması. İkinci bilgisayarda ben bir alma script ile saklanan büyük miktarda veri var (komut genellikle çalıştırmak için saat sürer). Ben aslında her zaman bir gecikme olmadan bu verilere erişmek için bir web UI oluşturma.

ben çağırır:

exec("bash initial.bash");

this is a driver script that is in my Apache folder. It calls the script on the other computer. calling: ssh otherMachine temp.bash&

Bu komut ikinci bilgisayardaki veri alma komut dosyasını çağırır.

Ben terminale initial.bash ararsanız, her şey sorunsuz ve başarılı bir şekilde çalışır, ama ben hariç initial.bash vadede daha sonra tüm komutları, benim PHP dosyasında ararsanız ssh otherMachine temp.bash&. Ben & koymak onu tamamlamak için birkaç saat sürer beri sonunda, böylece temp.bash, arka planda çalışır.

Ben Apache tarafından çağrıldığında neden iç içe komut çalışmadığından emin değilim. Sonuçta başka bir komut dosyasını çağıran bir komut, aramak için exec veya shell_exec kullanarak daha iyi bir alternatif var mı. Ben ikinci bir makine üzerinde bir komut demiyorlar nedeni doğrudan çünkü çalıştırmak için program alır zaman olduğunu. Komut tamamlanana kadar shell_exec php sayfayı oluşturmak değildir.

3 Cevap

Bir kaç öneri:

  1. (/usr/bin/ssh ya da bunun yerine sadece ssh yüklü oluyor her yerde) ssh tam yolunu koyarak deneyin

  2. Apache / PHP altında çalıştığı kullanıcı için parola sormadan othermachine ssh için doğru ayarlanmış olduğundan emin olun. SSH şifre sorar Açıkçası, kimse bunu yazmanız orada, bu yüzden sadece bir şey yapmış görünecektir.

  3. Hem de çıktıları yönlendirme deneyin - ssh othermachine temp.bash >/dev/null 2>&1 &

  4. Ssh için bazı farklı bayraklar deneyin. Gibi -n özellikle hangi arka planda ssh üzerinden bir komutu çalıştırmak için tasarlanmıştır.

Benim tahminim SSH user php is running under sevmez ki? Bunu terminalden çalışıyor demek - Eğer aynı php kullanıcı olarak oturum?

Ayrıca bazı tür daha iyi bir çözüm bir ileti sırası bulabilirsiniz.

Sen cron (zamanlanmış) işler kullanabilirsiniz. Cron işi sizin bash script kullanarak aracılığıyla periyodik olarak veri almak.

Ayrıca ("/ bin / bash / yol / / script.sh") exec çalışın; Belki php bash yolunu bulmaz. Ek bilgi için apache günlükleri bakmak zorunda.