Bash skriptlari cron orqali ishga tushirilganda muvaffaqiyatsiz tugadi, Libboost kutubxonasi topilmadi

Statistik modeli xotirada saqlash uchun libboost ishlatadigan bosh skriptini ishlayapman. Skriptni buyruq satridan to'g'ridan-to'g'ri ishlatganda (masalan, #/pylda /exec-test.sh) u yaxshi ishlaydi. Ammo, cron ishida ishlayotganda, men quyidagi xatolarni olaman:

"/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 qanday farq qiladi? O'rnatilishi kerak bo'lgan atrof-muhit o'zgaruvchisi bormi? Men shuni bilamanki, bu ildiz sifatida cron.

Rahmat

0

4 javoblar

LD_LIBRARY_PATH muhit o'zgaruvchisini tekshiring?

2
qo'shib qo'ydi

Umumiy sharh sifatida, cron() skriptida interaktiv (login) seansida odatda sizda bo'lgan atrof-muhit o'zgaruvchilari mavjudligiga tayanmang. Ba'zi ilovalar faqat minimal muhitni belgilaydi. Siz o'zingizning kerakli hamma narsani skriptingiz ichiga kiritishingiz kerak, yoki ularni bevosita deklaratsiya qilish orqali yoki o'zingizga kerak bo'lgan parametrlarga ega bo'lgan fayllarni o'zingizning qo'lingizga olishingiz kerak.

1
qo'shib qo'ydi

Hatto bu eski bo'lsa ham, men bu javob boshqalarga yordam berishi mumkin deb o'ylayman.

Bu erda mening crontab-ning namunali liniyasi:

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).

Buyruqlar ro'yxatini va nuqta-vergul (;) alohida buyruqlar ajratish uchun() foydalaning.

Bu yordam berishiga umid qilaman ...

1
qo'shib qo'ydi

PATH ni Cron skriptiga o'rnatishga harakat qiling

# /etc/cron.d/something
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0
qo'shib qo'ydi
Taqdim etilgan javob @ michael-krelin-hacker yanada to'g'ri, siz LD_LIBRARY_PATH ni o'rnatishingiz kerak, lekin siz buni Cron skriptingiz ichida qilishingiz kerak. Joriy LD_LIBRARY_PATH faylingizni "env" bilan tekshirishingiz kerak.
qo'shib qo'ydi muallif 0xd, manba
Ushbu ma'lumotdan mening kamchiliklarimni kechir - CentOS-ni o'rnatishga xos bo'lgan yo'l bormi?
qo'shib qo'ydi muallif Russ, manba