Cronjob PHP Hataları isteminde çalışıyor

4 Cevap php

Ben bir cronjob üzerinde aşağıdaki komut dosyası çalıştırıyorum ...

cd /etc/parselog/
php run_all.php >/dev/null

ve aşağıdaki hataları alıyorum:

[05-May-2009 20:30:12] PHP Warning:  PHP Startup: Unable to load dynamic library './pdo.so' - ./pdo.so: cannot open shared object file: No such file or directory in Unknown on line 0
[05-May-2009 20:30:12] PHP Warning:  PHP Startup: Unable to load dynamic library './mysql.so' - ./mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0
[05-May-2009 20:30:12] PHP Warning:  PHP Startup: Unable to load dynamic library './mysql.so' - ./mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0
[05-May-2009 20:30:12] PHP Warning:  PHP Startup: Unable to load dynamic library './mysqli.so' - ./mysqli.so: cannot open shared object file: No such file or directory in Unknown on line 0
[05-May-2009 20:30:12] PHP Warning:  PHP Startup: Unable to load dynamic library './odbc.so' - ./odbc.so: cannot open shared object file: No such file or directory in Unknown on line 0
[05-May-2009 20:30:12] PHP Warning:  PHP Startup: Unable to load dynamic library './pdo.so' - ./pdo.so: cannot open shared object file: No such file or directory in Unknown on line 0
[05-May-2009 20:30:12] PHP Warning:  PHP Startup: Unable to load dynamic library './pdo_mysql.so' - ./pdo_mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0
[05-May-2009 20:30:12] PHP Warning:  PHP Startup: Unable to load dynamic library './pdo_odbc.so' - ./pdo_odbc.so: cannot open shared object file: No such file or directory in Unknown on line 0
[05-May-2009 20:30:12] PHP Warning:  PHP Startup: Unable to load dynamic library './pdo_sqlite.so' - ./pdo_sqlite.so: cannot open shared object file: No such file or directory in Unknown on line 0
[05-May-2009 20:30:12] PHP Fatal error:  Call to undefined function mysql_connect() in /etc/parselog/stats_downloads.php on line 5

Ben komut satırından aynı komut dosyasını çalıştırdığınızda Ancak, in-hata olmadan mükemmel çalışır kaydedilir.

Bu isteminde benim $ PATH dizesidir:

$PATH = /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin

Herhangi bir fikir veya öneriniz? Ben cronjob çalışırken, bir lib yolu ya dahil bir şey yoktur eminim. Hatta tam yolunu ekleyerek denedim

4 Cevap

İpucu 1: cron işi tam olarak aynı $ PATH olduğundan emin olun:

cd /etc/parselog/
export PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
php run_all.php >/dev/null

İpucu 2: tüm diğer çevre değişkenleri de uygun olduğundan emin olun. Komutuyla env ile çevreyi dökümü, ve cron işi gelen ihracat ekleyin.

Şey cron sırasında başarısız ama komut satırında çalıştığında genellikle izinleri, çalışma dizini veya ortam değişkenleri bulunuyor.

Php yürütülebilir kendisi kitaplıkları yüklemek değil gibi görünüyor, sorun komut olmayabilir.

Bir cron bir komut dosyası çalıştırdığınızda, bu seti çok az ortam değişkenleri ile sınırlı bir kabuk içinde çalıştırılır. Lütfen hataları, bu hataları paylaşılan kütüphanelerin bir demet ilgilendirmeyen olarak ayarlanması gerekmektedir LD_LIBRARY_PATH olabilir gibi görünüyor, ama bu sadece bir tahmin. PHP için uygun kütüphane yolları cron komut doğru ayarlı değil gibi görünüyor.

Sen cron komut çalıştırırken komut için env komutu ekleme ve çıkış yakalayarak kullanılan ortamı yakalayabilirsiniz. Isteminde env çıkışı ile karşılaştırın ve çeşitleri için arayın. Büyük olasılıkla onlar kütüphane yolları kurmak yerel veya sistem profile veya bashrc (ya da belki hatta .login) dosyaları ya ihraç komutlarla olacaktır. Senin sorun gibi görünüyor çünkü ben özellikle yolları ve PHP ile ilgili değişkenler için bakmak istiyorum.

Benim son proje üzerinde bu konu ile birkaç kez uğraşmak zorunda kaldı ve temel çözüm için:

  1. komut dosyası çalıştırmak için gereken minimum ortamı belirlemek
  2. İstenilen ortamı kurar kısa bir komut dosyası oluşturmak
  3. ortamı düzgün ayarlanmış böylece script uygulamaları başlatılması 2. maddede gelen komut için bir çağrı ekleyin.
  4. Testi iyice :-) şey özledim vermedi emin olun.

Cron crontab kullanıcıların çalıştırdığınızda o kullanıcı olarak yürütülür. Ancak onların. Profili. Cshrc ya. Bashrc veya herhangi bir diğer dosya gibi kullanıcıların ev dizini herhangi bir dosya kaynak değildir. Eğer kaynak cron gerekiyorsa script aradığını komut cron onu yapmalıyız ihtiyacınız olacak herhangi bir dosyayı (okuyun). Vb yolları, kaynak dosyaları, ayar ortam değişkenleri, Ayar