Ben bir betik böylece Linux üzerinde üst sürecinin bağımsızdır başlayabilir miyim?

5 Cevap php

Süreç, / uçlarını ölürse yazısı hala devam böylece başka bir işlem bir komut dosyasını başlatmak için bir yolu var mı?

Setuid bu yapacak? Ben kök sahibi ayarlayın ve sonra komut dosyasını başlatmak için olsaydı?

Ben bir senaryo başlayan bazı PHP kodu var ama httpd öldürüldü ölür veya alırsa Örneğin, ben onunla benim komut alır düşünüyorum. Bu etrafında bir yolu var mı?

Özellikle, Apache 2 ve PHP 5 ile Fedora 10 üzerinde değilim.

5 Cevap

Dan here:

function become_daemon() 
{
    $child = pcntl_fork();
    if($child) {
        exit; // kill parent
    }
    posix_setsid(); // become session leader
}

Ayrıca, stdin, stdout ve STDERR kapatmak için iyi bir fikirdir ama ben PHP bunu nasıl emin değilim.

"Nohup yourscript.sh & deneyin"

Bunu olurken kabuğundan bir işi ayırmak için bash "çıkmamak" yerleşik kullanabilirsiniz. Bkz: http://www.faqs.org/docs/bashman/bashref_79.html

Sen (@ bmdhacks tarafından önerilen gibi) PHP'nin pcntl_fork () kullanmalısınız.

Temelleri süreç, tekrar, / chdir çatal, setsid, çatal, ve tüm açık dosya tanımlayıcıları kapatın. Standart uygulama da ($ NAME Cinin adıdır), /var/run/$NAME adında bir dosya oluşturun ve daha sonra işlem yürütmesini kontrol edebilir, böylece bu dosyanın PID yazmak olduğunu belirler.

I'm not a php programmer, but this is standard *nix stuff. The best php example I can google looks like this hello-world-daemon-with-fork But, he doesn't change his working directory to '/', nor does it look like he closed open file descriptors (I'm not sure how this would work in php), so that he's not connected to the stdin, stdout, and stderr of the original process.

Ben biraz daha kazdık, ve php en pcntl_fork() ile yardımcı olabilir başka bir makale bulunamadı

(I here Onu yoluyla bulunabilir) bu sizin için kolları System_Daemon denilen bir armut modülü var gibi ve bu görünüyor.

Komut kabuğu itibaren kabuğundan ayırır arka planda komutu başlatmak için komut satırının sonunda bir işareti (&) ekleyebilirsiniz.

Some good info here: http://www.linuxforums.org/forum/linux-programming-scripting/50096-moving-processes-background-foreground.html