Cron ile çalıştırıldığında Bash betiği başarısız oluyor, Libboost kütüphanesini bulamıyorsunuz

İstatistiksel bir modeli bellekte tutmak için libboost kullanan bir bash komut dosyası çalıştırıyorum. Komut dosyasını doğrudan komut satırından çalıştırdığımda (yani: # /pylda/exec-test.sh) düzgün çalışıyor. Ancak, cron iş üzerinde çalışırken, aşağıdaki hatayı alıyorum:

"/root/pylda/src/infer: error while loading shared libraries: libboost_program_options.so.1.46.1: cannot open shared object file: No such file or directory"

Cron nasıl farklı davranır? Ayarlanması gereken bir çevresel değişken var mı? Bu bildiğim kadarıyla, kök olarak cron.

Teşekkürler

0

4 cevap

LD_LIBRARY_PATH ortam değişkeninizi kontrol edin

2
katma

Genel bir yorum olarak, cron() komut dosyasını kullandığınızda, normalde etkileşimli (oturum açma) oturumu sırasında sahip olduğunuz çevresel değişkenlerin varlığına güvenmeyin. Bazı uygulamalar sadece minimum bir ortam tanımlar. Komut dosyasında ihtiyacınız olan her şeyi ya doğrudan bildirim yoluyla ya da ihtiyaç duyduğunuz değişkenlerin bir dosyasına kaynak olarak ekleyerek iyi bir şekilde yapabilirsiniz.

1
katma

Bu eski olsa bile, bu cevabın başkalarına yardımcı olabileceğini düşünüyorum.

İşte crontab'ımın bir örnek satırı:

0 3 * * 1,2,4,5,6 (. /home/oracle/.profile; export ORACLE_SID=myDB;. myscript.ksh parm1 parm2; ) 1>/dev/null 2>&1

Which: Execute the profile of my user (oracle), so I am sure I have the good envs:. /home/oracle/.profile Set a local env value: export ORACLE_SID=myDB Executes the script with its params:. myscript.ksh parm1 parm2 (nota: the dot because the script does not have the x flag) Does not send email: 1>/dev/null 2>&1 (My script sends the needed emails with formatting).

Komutların bir listesini ve komutları ayırmak için noktalı virgül (;) eklemek için() kullanın.

Bunun yardımcı olabileceğini umuyorum ...

1
katma

Cron betiğinde PATH değişkenini ayarlamaya çalışın

# /etc/cron.d/something
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0
katma
Sağlanan @ michael-krelin-hacker yanıtı daha doğru, LD_LIBRARY_PATH ayarlamalısınız, ancak yine de bunu Cron komut dosyanızın içinde yapmalısınız. Mevcut LD_LIBRARY_PATH'nizi 'env' ile kontrol etmelisiniz.
katma yazar 0xd, kaynak
Bu konuda bilgi eksikliğimi affet - Bir CentOS kurulumuna özgü bir yol var mı?
katma yazar Russ, kaynak