crondan bir sh betiği çalıştırma


12

Bir test.sh betiğim var

#!/bin/sh
php /home/v/file.php
sh /root/x/some.sh

dosyayı komut satırından root olarak çalıştırdığımda çalışır.

sh /home/v/test.sh 

crontab -e (kök cron) olarak ayarladığımda çalışmıyor

 * * * * * sh /home/v/test.sh

Neyi yanlış yapıyorum? Teşekkürler


"çalışmıyor" çalışmıyor. Görmek? Ne demek istediğimi bilmiyorsun ve aynı şekilde ne demek istediğini de bilmiyoruz. Yani (evet) ne çalışmıyor? Bir şey olabilirdi. Tmow'un tahmini doğru olabilir, ama sadece bir tahmin (ve bence oldukça iyi bir tahmin, ama yine de).
Jürgen A. Erhard

Evet, hangi sonuçları gördüğünüz konusunda daha spesifik olursanız, sorunun ne olduğunu daha iyi belirleyebiliriz. Yani, ne demek "çalışmıyor" (:
gabe.

Sistem günlüğünde herhangi bir günlük görmüyorum ve komut dosyaları gerçekleşmeyen bir db'ye bazı ekler yapıyor ve komut dosyasını el ile çalıştırırsam olurlar.
Elzo Valugi

Yanıtlar:


15

Adama göre:

Cron arka plan programı HOME dizininizden bir alt kabuk başlatır. Oturum açmadığınızda çalışacak bir komut zamanlarsanız ve .profile dosyanızdaki komutların çalışmasını istiyorsanız, komutun .profile dosyanızı açıkça okuması gerekir.

Cron arka plan programı, her kabuk için HOME, LOGNAME, SHELL (= / usr / bin / sh)
ve PATH (= / usr / bin) tanımlayan varsayılan bir ortam sağlar .

Yani cron daemon php nerede olduğunu bilmiyor ve tam php yolunu elle belirtmelisiniz, örneğin (gerçek PHP yolunuzu bilmiyorum):

#!/bin/sh
/usr/local/bin/php /home/v/file.php
sh /root/x/some.sh

Başka bir yol da, / etc / profilini (veya .profile / .bashrc) kaynaklamaktır.

* * * * * . /home/v/.bashrc ; sh /home/v/test.sh

Bu, .bashrc'niz ihtiyacınız olan ortam değişkenlerini ayarladıysa yararlıdır (örn. PATH)

DÜZENLE

İlginç bir okuma " Newbie: Cron'a giriş ", makaleyi başlıktan küçümsemeyin (herkes için bir okuma), aslında iyi yazılmış ve sorunuza mükemmel cevap verin:

...
PATH, cron için arama yolunda olacak dizinleri içerir, örneğin / usr / cog / bin dizininde 'foo' programınız varsa, / usr / cog / bin dizinine her aradığınızda 'foo' yapmak için tam yolu kullanmanıza engel olacağı için.
...


Kötü $ PATH, el ile çalışan komut dosyalarının en yaygın nedenidir, ancak crondan değil.
Patrick

@Patrick Elbette cron php'nin nerede olduğunu bilmiyorsa bir sorundur, aksi takdirde Elzo crontab herhangi bir sorun olmadan çalışır, PATH problemi OLMALIDIR.
tmow

Cevaplarınız için teşekkürler. Benim için çok kolay çalıştı !!! .. Çok teşekkürler @tmow.
Vignesh Prajapati

5

Bir terminale yazıldığında ancak crondan değil, ortak sıraya göre çalışan komutların dört yaygın nedeni vardır:

  1. Cron sınırlı bir ortam sağlar, örneğin minimal $PATHve beklenen diğer değişkenler eksiktir.
  2. Cron varsayılan olarak / bin / sh komutunu çağırırken, başka bir kabuğu etkileşimli olarak kullanıyor olabilirsiniz.
  3. Cron% karakterini özel olarak ele alır (komutta yeni bir satıra dönüştürülür).
  4. Cron terminal veya grafik ortamı sağlamaz.

İşiniz hata mesajları da dahil olmak üzere çıktı üretirse, cron size tüm çıktıyı içeren bir e-posta gönderir. Aldığınız postayı yerel olarak okuduğunuzdan emin olun veya okuduğunuz bir adrese iletin. Yerel bir hesaptan başka bir adrese posta iletmek için diğer adresi girin ~/.forward. Cron işi bir sistem kullanıcısı olarak çalışıyorsa ( root,, webmaster…), kullanıcının postasının size (ve başka herhangi bir yöneticiye) yönlendirildiğinden emin olun; En posta ayarıyla gibi çizgiler koymak root: elzoiçinde /etc/aliases.


2

Cron arka plan programı genellikle komutunuzu PATH ortam değişkeninin bazı sistem varsayılanlarıyla sınırlı olduğu bir kabukta yürütür, örneğin / usr / bin: / bin.

Muhtemelen, phpkomutunuz / usr / bin veya / bin dosyasında mevcut değildir ve bu nedenle komut dosyası cron üzerinden yürütüldüğünde başarısız olur ve başarısız olduğunda başarılı çalışır.

Cron genellikle hataları veya iş iletilerini posta yoluyla kök kullanıcıya bildirir (yani bir komut bir çıkış durumu döndürdüğünde! = 0 veya iş bittikten sonra stdout / stderr'e çıktı üretir).

Sisteminize bağlı olarak, bu mesajları almak için yerel posta dağıtımını ayarlamanız gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.