esrcript cron Blues
-
22-09-2019 - |
سؤال
لدي ملف escript يعمل بشكل جيد من سطر الأوامر ، أي:
./escript_file
من المفترض أن تكون صديقة للكرون وجميع المسارات صريحة ، لكن عندما أقوم بتشغيله ، فإنه يفشل في التجميع قائلاً إن هناك هناك bad attributes
.
السمات السيئة المعنية هي التعاريف الكلية:
-define(COOKIE, 'somecookie').
الاجابة
بفضل اقتراح Geoff Ready ، قمت بالتحقيق في إصدار Erlang الذي كان يعمل من خلال الطباعة init:script_id()
الذي يطبع سلسلة مثل {"OPT APN 181 O1", "R13B"}
وبالتأكيد كانت إصدارات سطر الأوامر و CRON تلتقط إصدارات مختلفة.
كان للنص خطًا أوليًا:
#!/usr/bin/env escript
وكان نظام التشغيل "إيجاد" إرلانج بالنسبة لي. تعني متغيرات البيئة المختلفة في كرون أن إرلانج مختلف تم التقاطه (إجابة جيف الأولى ، وأحدهما عرفته ولكن لم أستطع أن أرى كيف سيؤثر ذلك على الأشياء).
الحل بعد ذلك هو فرض الإصدار من خلال خط انطلاق:
#!/usr/local/lib/erlang/erts-5.7.3/bin/escript
PostScript
كان هناك أيضا أوبونتو مختلف apt-get
تثبيت إصدار سابق من Erlang (في موقع مختلف لتثبيت المصدر) وتثبيت 64 بت خاطئ ...
استمرت بيئة كرون فقط في العودة إلى عمليات التثبيت القديمة والأكثر غموضًا ، وفشلت طوال الوقت :(
المحلول
ربما يلتقط كرون نسخة مختلفة من إرلانج في المسار. Erlang R12B الوثائق يقول أن Escript يتجاهل توجيهات المعالج المسبق إلى جانب تشمل _lib. Erlang R13B الوثائق يقول أن المعالج المسبق يتم تشغيله على الملف. من شأنه أن يفسر بالتأكيد الفرق في السلوك.
نصائح أخرى
إذا كان يعمل بشكل جيد من سطر الأوامر ، فإن السبب المحتمل هو اختلاف في متغيرات البيئة لقذيفة التفاعلية الخاصة بك عند تشغيل CRON البرنامج النصي.