PHP Apache yeniden miyim?

13 Cevap php

Ben bir sanal sunucu apache yapılandırma dosyada değişiklik yapmak ve daha sonra yeni bir yapılandırma yürürlüğe gireceği Apache'yi yeniden başlatmanız gerekiyor yerel bir sunucu var.

PHP bunu yapabilir mi? Ben passthru ve exec denedim ama işe yaramadı. Belki sorun PHP'nin ana sürecini yeniden başlatmak için çalışıyorum ki?

Herhangi bir yardım için teşekkür ederiz!

13 Cevap

Ben bir sunucu olduğunu kontrol ve sunucuyu yeniden başlatın (web sunucusu yürütülmez PHP ile yazılmış) bir cron komut dosyası kullandım.

Eğer çocuk için kötü etkileri vardır ebeveyn süreci, öldürecekler biliyorum çünkü Ancak, ben, bir sunucu oluşturulan sürecinden bunu yapmaz.

Basit yöntem PHP oluşturabileceğiniz bir dosya / tmp / RESTART_APACHE sahip olacağını ve hangi cron komut için denetler. Cron komut dosyası / tmp / RESTART_APACHE görürse o zaman Apache uygun bir yeniden yapar.

Bir cron komut dosyası kullanma (bunu her dakika çalışacak eğer 60s kadar) bir gecikme tanıtacak, ama istediğiniz gibi bunun dışında çalışması gerekir.

Eğer bu kullanma niyetinde nasıl bağlı olarak, bu hile yapabilirsiniz.

(Muhtemelen tmp / izinlerini ayarlamak ve sunucu dosyası oluşturmak için mümkün olan kimse önlemek için / farklı bir dizin kullanmak istiyorum.)

EDIT: Bu mesaja Aaron H'leri yorum bakın. Ben ne diyor katılıyorum: Eğer gerçekten web sunucusu yeniden yeteneği halka genellikle mevcut bir hizmet değildir dikkatli olmak istiyorum.

Yeniden tetikleyebilir sisteme erişimi kısıtlamak; Web işlem bu dosyayı oluşturmak ve genellikle akıllı olabilir ancak böylece yeniden tetikler dosya kısıtlayıcı izinleri olduğundan emin olun.

Ben çok tam şey yaptık. Ancak bu hızlı talep üzerine bizim geliştiriciler için sanal dizi oluşturmak için, sadece bir geliştirme ortamı oldu. Şimdiye kadar çok sevindirici iyi çalıştı.

Benim yaklaşım, sistem üzerinde yeni bir kullanıcı oluşturmak ben komutu veren, o kullanıcıya geçiş ifadesi olmadan, yetkili anahtarla Localhost'a SSH kullanılan apache ve Apache-> PHP yeniden yüklemek için bu kullanıcı sudo haklarını vermek oldu.

Bunun nedeni apache kullanıcı (genellikle www-data) kendini yeniden genel güç vermek istedim vermedi oldu. Ben yeni kullanıcı wwwctrl adında.

Ben kullanılan buyurulmuştur:

ssh -i /path/to/key-file wwwctrl@localhost sudo /etc/init.d/apache2 reload

Ben wwwctrl kullanıcı yerel ana anahtar ~ wwwctrl / .ssh / known_hosts eklenmesini var gibi elle bir kez bu komutu çalıştırmak zorunda.

Ben komutun çalışmasını izlemek için () proc_open kullanılır.

Her sistem temelde bir "ana @ @ host do ... wwwctrl olarak foreach hosts" Bu yaptığını, Apache yeniden bu wwwctrl kullanıcı vardı bu yüzden aslında ben farklı sistemlerde farklı Apache kurulumları için sanal konak toplu üreten edildi.

Eğer yerine bir 'yeniden' geçmek istemez misiniz 'restart?'

at Eğer ikinci aşağı zamanlayabilirsiniz ama eğer ben o uygulanmasına bağlıdır sanırım emin değil yapmak mümkün olacak

Ben siteler etkin dizin izlemek ve dosya eklenen veya modifiye zaman Apache yeniden bir cini yaratacak. Sonra bir cron ile olarak 60 saniye kadar beklemek zorunda değilsiniz.

Bunu yapmak için sudo dosyasını düzenleyin ve sonra tabii sudo kullanarak, sisteminizde kullanılan başlatma komutunu çalıştırmak gerekir. Eğer bilgilerinizi verirseniz, ben sana anlatabilirim ama bunu bile erişimi var? Bu barındırılan? Cron muhtemelen burada olsa daha iyi bir seçim olacaktır.

Ben sunucu üzerinde tam denetime sahip ve gerekli değişiklikleri yapabilirsiniz.

Apache etrafında değil başka bir yol, php çağırır beri bu sorta şey emir komuta zinciri standart ihlal. Ben ikinci cron öneri. Sadece ev sahibi dosya değişiklikleri kontrol etmek için yeterli ayrıcalıklara sahip bir cron işi ayarlamak ve herhangi bulunursa apache yeniden başlatın.

Bir anlık yeniden olabilir, eğer bu harika olurdu ... ama ben bir dakika sanırım.

de re

  1. her dakika çalışır, bu yüzden aynı 60s gecikme var
  2. en sunucularında cron tarafından tetiklenen, böylece daha hızlı cron kullanarak daha olmayacak
  3. ama hiç ateş ve kilit dosyasının yerini varlığını kontrol etmek zorunda sizin komut önleyeceğini

Ben komut kabuk erişimi var ise, apache veya sunucu yeniden başlatılır bir komutu çalıştırmak için exec() fonksiyonunu kullanabilirsiniz olduğunu varsaymak istiyorum.

Eğer düzenleme / etc / sudo deneyin ve apache init komut için apache süreci privelagese çalıştıran kim verecek ... ama bu soru tamamen hemen aklımı esiyor olabilir. i nasıl ve neden merak ediyorum ..... sen php apache yeniden çalışıyorsanız .. şey size ulaşmak için çalışıyoruz ne olursa olsun amaç, muhtemelen bunu yanlış şekilde yaptığını söylüyor. geri gönderebilir ve şimdi bu konuda im gerçekten meraklı, ne lütfen bize bildirin.

shell_exec (fakat php gibi süper kullanıcı, suPHP'lidir acomplished edilebilir bir şey çalışıyor olması gerekir) olabilir ile