मैंने अपना काम इस आदेश के साथ हर दिन 12:30 बजे चलाने के लिए निर्धारित किया है:
30 12 * * * java -jar test.jar
यह त्रुटि फेंकता है:
/bin/sh: 1: java: not found
मैंने यह आदेश चलाने की कोशिश की: java -jar test.jar
खोल से और यह ठीक काम किया।
अब मैं समझ नहीं पा रहा हूं। मैं कहूंगा कि यह इसलिए हो रहा है JAVA_HOME
पर्यावरण चर सेट नहीं है, लेकिन फिर यह शेल से क्यों काम करता है?
उत्तर:
उत्तर № 1 के लिए 1त्रुटि आपको बताती है कि शेल पता नहीं लगा सका java
निष्पादित करने के लिए द्विआधारी। इससे कोई लेना-देना नहीं है JAVA_HOME
पर्यावरण चर, लेकिन साथ PATH
वैरिएबल जिसके द्वारा परामर्श किया जाता है sh
किसी भी आदेश को खोजने के लिए।
जब आप अपने कार्य को चलाते हैं cron
शेल को आपके इंटरेक्टिव शेल के रूप में समान आरंभीकरण प्राप्त नहीं हुआ, जहां कमांड आपके लिए काम करता है। आप समान रूप से ऐसा पाएंगे JAVA_HOME
isn "वहाँ, या तो सेट नहीं है।
उत्तर № 2 के लिए 1
आपका लॉगिन शेल वातावरण आपके क्रोनजॉब वाले से अलग है उपयोग env
अपने पर्यावरण को मुद्रित करने के लिए।
दोनों पर पथ की जाँच करें - क्रोन के भीतर (कुछ इस तरह)
30 08 * * * env > ~/cronenv
। अपने लॉगिन शेल में बस उपयोग करें env
। फिर पाथ चर की तुलना करें। जैसा कि @Marko Topolnik ने पहले ही अपने PATH को क्रोन के भीतर बताया है, जाहिर है कि इसमें आपका java निष्पादक नहीं है।
जवाब के लिए 0 № 3
आप अपने crontab फ़ाइल में एक पंक्ति जोड़ सकते हैं जिसमें वह पथ है जिसकी आपको आवश्यकता है:
# m h dom mon dow command
PATH=.....
आपको शायद कुछ इस तरह की आवश्यकता है:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
आप भी उपयोग कर सकते हैं echo $PATH
यह जानने के लिए कि आपके नियमित वातावरण में क्या है और बस उस मूल्य का उपयोग करें।