2015-03-09 15 views
5

Sorun yaşıyorum bir php komut dosyasını çalıştırmak için denetleyiciyi yapılandırmayı deneyin. Bu deney myScript.php içinSupervisord "çıkış durumu 1 beklenmiyor" php komut dosyası çalıştırılıyor

[program:worker1] 
command=php myScript.php 
directory=/home/path/to/script/ 
user=root 
autostart=true 
autorestart=true 
stderr_logfile=/var/log/worker1.err.log 
stdout_logfile=/var/log/worker1.out.log 
redirect_stderr=true 
environment=PATH="/usr/bin" 

sadece echo "test".PHP_EOL;

php hataları raporlama günlük yok çıktısını:

2015-03-09 08:53:06,342 INFO supervisord started with pid 2030 
2015-03-09 08:53:06,358 INFO spawned: 'worker1' with pid 2031 
2015-03-09 08:53:06,423 INFO exited: worker1 (exit status 1; not expected) 
2015-03-09 08:53:06,424 INFO received SIGCLD indicating a child quit 
2015-03-09 08:53:07,440 INFO spawned: 'worker1' with pid 2032 
2015-03-09 08:53:07,587 INFO exited: worker1 (exit status 1; not expected) 
2015-03-09 08:53:07,589 INFO received SIGCLD indicating a child quit 
2015-03-09 08:53:09,604 INFO spawned: 'worker1' with pid 2033 
2015-03-09 08:53:09,756 INFO exited: worker1 (exit status 1; not expected) 
2015-03-09 08:53:09,758 INFO received SIGCLD indicating a child quit 
2015-03-09 08:53:12,775 INFO spawned: 'worker1' with pid 2034 
2015-03-09 08:53:12,973 INFO exited: worker1 (exit status 1; not expected) 
2015-03-09 08:53:12,974 INFO received SIGCLD indicating a child quit 
2015-03-09 08:53:13,976 INFO gave up: worker1 entered FATAL state, too many start retries too quickly 

supervisord yapılandırma: hata ayıklama modunda danışmanı Running bu bana verir ve komut dosyasını yazım yoluyla çalıştırırsam beklendiği gibi çalışır. Denetim otoritesi günlüğü, debuggin ile aynı çıktıyı rapor eder.

/usr/bin/php /home/path/to/script/myScript.php gibi mutlak yolları kullanmayı denedim ama hiçbir şey değişmedi. myScript.php için

Dosya izni Gerçekten ı kontrol edebilir başka ne bilmiyorum -rwxrwxr-x 1 root apache

ayarlanır. Destek için teşekkürler! UPDATE_1

Ben de/bin/cat veya bash senaryosu gibi diğer programı izlemek için çalıştı ve bir cazibe gibi çalışır ettik. Sorun php ile sınırlı gibi görünüyor.

UPDATE_2 N.B. olarak

o ÖLÜMCÜL halde girer önceki gibi

while(true){ 
    echo "test".PHP_EOL; 
    sleep(10); 
} 

aynı i daha uzun süren işbaşı gibi görünmek için test komut dosyası değiştirdik Açıklamalarda belirttiği.

+0

"worker1.err.log" da hiçbir şey söylemiyor musunuz? – MegaAppBear

+0

Hayır, hiçbir şey. Oluşturulmadı bile ... – Luciano

+0

"komut" satırında komut dosyasının tam yolunu denediniz mi? – MegaAppBear

cevap

8

Bu davranışı, çıkış kodu 1 ile yeniden üretebilmemin tek yolu, dosyaya geçersiz bir yol kullanmaktır. Öncelikle yolun doğru olup olmadığını iki kez kontrol edin. Ama sanırım bunu daha önce yaptın.

Dosyanın ana dizininizin altında olduğunu ve kök kullanıcının erişemediğini ve çalıştırılamayacağını varsayalım. Bu yüzden, komut dosyasının yerini değiştirmeye çalışacağım.

cp /home/path/to/script/myScript.php /tmp/myScript.php 

ve bu gibi supervisord yapılandırma değiştirin::

test için, /tmp/myScript.php altında komut yerleştirebilirsiniz

[program:worker1] 
command=php myScript.php 
directory=/tmp/ 
user=root 
autostart=true 
autorestart=true 
stderr_logfile=/var/log/worker1.err.log 
stdout_logfile=/var/log/worker1.out.log 
redirect_stderr=true 
environment=PATH="/usr/bin" 

Şimdi komut dosyasını çalıştırmak mümkün olmalıdır supervisored.

Bu işe yarıyorsa, kök dizinin komut dosyasına erişmesini engellemek için hangi klasörü kontrol etmeniz gerekir. Bu, bir (ve yerleşik) klasörü (ev dir?), Ya da konum başka bir yerden (samba, nfs ...) monte edilmiş olabilir. Sorunu çözmek için kullanıcıyı root'dan kullanıcıya değiştirmeyi deneyebilir (bunu önermem) veya projenin yerini evinizin altında bulunmayan başka bir klasöre değiştirebilirsiniz.

+0

çözümünüz işe yarıyor, sadece dosyayı tmp dizinine taşıdım! Ama amiri kullanıcıyla orijinal konumdayken çalıştırsam bile Çalış. Senaryoyu ana klasörün dışına taşımaya çalışacağım ... Yardımın için teşekkürler! – Luciano

+0

Bu çok yardımcı oldu teşekkür ederim! Bir bash komut dosyasını (yol problemlerinden kaçınmak için) çalıştırmak için denetleyiciyi kullanıyordum ve her ikisini de değiştirip dizini değiştiriyordum. –

0

Bir süre Supervisord kullanıyorum ve bu benim config ne var: Bir anwser olarak bu yazıyorum

[program:worker1] 
command=php /absolute/path/to/myScript.php 

Sebep biçimlendirme kaynaklanmaktadır.

for(i = 0; i < 10; i++) 
{ 
    printf("\nIteration: %d", $i); 
    usleep(1000 * 200); // 200 milliseconds between each printf 
} 

exit; 

Ve gözetimi ekleyin: Ayrıca

, bu senaryoyu deneyin. Yankılanmasından sonra yeniden başlatılmalıdır.

+0

Bu snippet'i denedim, while (true) döngüsüyle aynı davranışı. Yardım! – Luciano

0

startsecs = 0 ayarlamak deneyin:

[program:foo] 
command = ls 
startsecs = 0 
autorestart = false 
http://supervisord.org/configuration.html 

startsecs

programının başarılı bir başlangıç ​​dikkate almak başlatıldıktan sonra çalışan kalmalı toplam saniye sayısı. Program, başladıktan sonra bu kadar uzun bir süre boyunca kalmazsa, “beklenen” bir çıkış koduyla çıksa bile (çıkış kodlarına bakın), başlatma bir hata olarak kabul edilir. Programın belirli bir süre boyunca çalışmaya devam etmesini gerektirdiğini belirtmek için 0'a ayarlayın.