PHP cron komut dosyası çalıştırmak için alınamıyor

4 Cevap php

Ben her dakika çalıştırmak için gereken bir PHP komut dosyası var. Ben komut dosyası komut satırından çalışır ve herhangi bir ortamda sorunları önlemek için mutlak yolları kullanıyorum emin yaptık:

/usr/bin/php -q /var/www/myapp/services/myservice.php

Ben komut yazar günlük dosyasında gördüğünüz gibi elle komut satırından root olarak bu çalışan, gayet iyi çalışıyor. Emin olmak için, komut yanı sıra yürütme izinleri vardır.

Ancak, cron aynı tam komutunu verirken:

* * * * * /usr/bin/php -q /var/www/myapp/services/myservice.php

Bu çalışmıyor ya da en azından öyle görünür. Ben de başka bir günlük dosyasına çıkış yönlendirme denedim:

* * * * * /usr/bin/php -q /var/www/myapp/services/myservice.php >> /mylog.log 2>&1

Hala hiçbir şey. Ben komut olma koştu hiçbir gösterge yok. Ben öyle değil sanırım, ama başka ne bakmak için hiçbir fikrim yok. Hatta cron daemon yeniden başlatılır.

Ben StackOverflow benzer sorular var biliyorum, ama cevapların hiçbiri benim için bir çözüm olduğu ortaya çıktı. Bu kelimenin tam anlamıyla beni deli ediyor, büyük ölçüde herhangi bir yardım takdir edecektir.

4 Cevap

Eğer running user bölümü cevapsız:

*      *       *       *       *       nobody  /usr/bin/php -q /var/www/myapp/services/myservice.php >> /mylog.log 2>&1

Benim sorunu için bir çözüm bulundu:

http://serverfault.com/questions/97828/php-from-command-line-path-problems/97881#97881

Ben komut dir içine cd (change directory) için gerekli ve sonra onu aramak çıkıyor. Şaşırtıcı, ben mutlak yolları kullanıyorum, ama çalışıyor beri. Yanıt zaman almış olanlara teşekkürler.

Eğer bir cron işi komut satırından çalıştırılabilir hareket için yapmanız gereken şeylerin önemli bir kısmı genellikle vardır.

Varsayılan olarak, cron işleri giriş oturumları olması neredeyse kesinlikle tam yolunu (ve diğer ortam değişkenleri bir dizi) olmayacak küçük bir ortam olsun. (Eğer keşfettim gibi) da aynı dizinde olmayabilir.

Ne yapmak eğilimindedir yürütmek için:

env | sed 's/^/export /' >$HOME/cron.env

Tam ortamı elde etmek için bir oturum açma oturumunda, sonra benim cron işleri gerçek işler yapmak için denemeden önce bu komut dosyasını çalıştırmak emin olun. Çıkan komut toplama (alıntı, _ ve PWD gibi geçici ortam değişkenleri kaldırma ve benzeri) küçük bir miktar gerekebilir.

Bu şekilde ben giriş ve cron ortamları aynı olduğundan emin olabilirsiniz.

Bu "kötü uygulama" olarak kabul edilebilir ama bu benim için çalışıyor.

Curl ile çalıştırmak

* * * * * curl -s http://www.domain.com/services/myservice.php