ক্রোনটব এক্সিকিউশনটিতে এক্সিকিউটিভ ব্যবহারকারীর মতো পরিবেশের ভেরিয়েবল নেই


20

আমি আমার ক্রোন্তাবের কাজটি 0 2 */1 * * /aScript >aLog.log 2>&1একটি 'রুট' ব্যবহারকারী হিসাবে চালিয়েছি , তবে আমি দেখতে পেয়েছি যে এনভিনিউটি 'রুট' ব্যবহারকারীর চেয়ে enক্যবদ্ধ, এবং তাই আমার স্ক্রিপ্টগুলির একটি পৃথক রানটাইম আচরণ অনুভব করে।

একটি চেষ্টা ফিক্স rc.d ফাইলগুলিতে রফতানি কমান্ড স্থাপন করছিল, তবে এটি এখনও প্রদর্শিত হয়নি! আমি এসক্রিপ্টে রফতানি কমান্ডগুলি রেখেছি

আমার প্রশ্নটি কি এই সমস্যার কাছে যাওয়ার আরও ভাল উপায় আছে? এবং এনভিভি কেন একই ব্যবহারকারী 'রুট' থেকে থাকা সত্ত্বেও অনুপস্থিত? (আমি মূল থেকে 'ক্রন্টব-ই' চালিয়ে ক্রোনটাবকে সংশোধন করি)


8
ক্রোন সর্বদা বেশিরভাগ ফাঁকা পরিবেশ নিয়ে চলে। হোম, LOGNAME, এবং শেল সেট করা আছে; এবং একটি খুব সীমাবদ্ধ পাঠ্য। আপনি যদি সমস্ত ভেরিয়েবল নিজেই সেট করতে না চান তবে আপনি নিজের source(ব্যাশ) প্রোফাইলে সক্ষম হতে পারেন ।
cyberx86

2
@ সাইবারএক্স ৮86: উত্তর হিসাবে কেন লেখেন না এবং খ্যাতি পান?
ব্যবহারকারী 9517 GoFundMonica

2
@ আইইন: প্রতিনিধি সর্বদা স্বাগত - তবে কখনও কখনও মনে হয় এক লাইনের উত্তর সত্যই উপার্জন করতে পারে না। আমি সম্পূর্ণরূপে স্বীকার করি যে একটি সংক্ষিপ্ত উত্তরটির জায়গা রয়েছে, তবে আমি যখন কিছু সহায়তা দিতে চেয়েছিলাম তখন একটি 'সহজ উপায়' হিসাবে মন্তব্যগুলি ব্যবহার করেছি (সম্ভবত ভুলভাবে), তবে একটি পূর্ণাঙ্গ, বিশদ বিবরণ লিখতে পারি না (এটি সকাল ১১ টা ছিল)। ..)। তবে আমি আপনার পরামর্শ নেব এবং এটিকে কিছুটা প্রসারিত করব এবং উত্তর হিসাবে এটি যুক্ত করব।
cyberx86

@ সাইবারএক্স ৮86: ভুল বা কিছুই না বলে সঠিক একটি লাইনার রাখাই ভাল।
ব্যবহারকারী 9517 GoFundMonica

উত্তর:


31

ক্রোন সর্বদা বেশিরভাগ ফাঁকা পরিবেশ নিয়ে চলে। হোম, LOGNAME, এবং শেল সেট করা আছে; এবং একটি খুব সীমাবদ্ধ পাঠ্য। কাজেই এক্সিকিউটেবলের জন্য সম্পূর্ণ পাথ ব্যবহার করা এবং ক্রোন ব্যবহার করার সময় আপনার স্ক্রিপ্টে আপনার প্রয়োজনীয় কোনও পরিবর্তনগুলি রফতানি করার পরামর্শ দেওয়া হয়।

আপনার ক্রোনে আপনার পরিবেশের ভেরিয়েবলগুলি সেট করতে আপনি ব্যবহার করতে পারেন এমন অনেকগুলি পন্থা রয়েছে তবে এগুলি আপনার স্ক্রিপ্টে সেট করার জন্য সমস্ত পরিমাণ।

পন্থা 1:

আপনার স্ক্রিপ্টে ম্যানুয়ালি আপনার প্রয়োজন প্রতিটি ভেরিয়েবল সেট করুন।

পদ্ধতির 2:

আপনার প্রোফাইল উত্স:

. $HOME/.bash_profile(বা . $HOME/.profile)

(আপনি সাধারণত দেখতে পাবেন যে উপরের ফাইলটি অন্যান্য ফাইলের উত্স উত্পন্ন করবে (উদাঃ ~ / .bashrc -> / etc / bashrc -> /etc/profile.d/*)) যদি না হয় তবে আপনি সেগুলিও উত্স করতে পারবেন)

পদ্ধতির 3:

আপনার পরিবেশের ভেরিয়েবলগুলি একটি ফাইলে সংরক্ষণ করুন (পছন্দসই ব্যবহারকারী হিসাবে চালান):

env > /path/to/my_env.sh

তারপরে আপনার ক্রোন স্ক্রিপ্টের মাধ্যমে আমদানি করুন:

env - `cat /path/to/my_env.sh` /bin/sh

পদ্ধতির 4:

কিছু ক্ষেত্রে, আপনি বিশ্বব্যাপী ক্রোন ভেরিয়েবল সেট করতে পারেন /etc/default/cron। তবে এটির জন্য ঝুঁকির একটি উপাদান রয়েছে, কারণ এটি সমস্ত ক্রোন কাজের জন্য সেট করা হবে।


অ্যাপ্রোচ 2 সার্ভারের জন্য সেরা যেখানে আপনার সংবেদনশীল জিনিস রয়েছে যা এনভ ভার্স - পাসওয়ার্ড, এপিআই কী ইত্যাদিতে ডিস্কের আঘাত করতে হবে না me
এপি

অ্যাপ্রোচ 4 আমার জন্য ডকার পরিবেশে কাজ করেছে যেখানে ডকার ইঞ্জিনটি এনভ ভার্সগুলি সেট করে। এটি কাজ করার জন্য, আমাকে ডক প্রবেশের পয়েন্টে আমার vর্ষাটি সংরক্ষণ করতে হয়েছিল। সম্পূর্ণ সমাধানটি এখানে: github.com/rayyanqcri/swarm-scheduler
হামাদে

আপনি কি আমার জন্য 3 পদ্ধতির বিস্তারিত বলতে পারেন? আমি যখন এটি আমদানি করার চেষ্টা করি তখন পাইbash: SHELL=/bin/bash: No such file
কুবোএমডি

1

ক্রোন নির্দিষ্টভাবে এটি ব্যবহার করবে যার মাধ্যমে এটি চলবে its

সুতরাং, আপনি যদি নিজের ব্যবহারকারীর একই পরিবর্তনশীল রাখতে চান, তবে এটি রুট বা অন্য কোনও ব্যবহারকারীর পরিবর্তে আপনার নিজের ব্যবহারকারীর সাথে চালানোর চেষ্টা করুন।

অথবা

সর্বোত্তম উপায় হ'ল আপনার স্ক্রিপ্টে সেই পরিবর্তনগুলি রফতানি করা।


1

RedHat CentOS এ, আপনি স্থায়ীভাবে সেট করতে /etc/rc.d/init.d/funitions ডিফল্ট PATH সেট করতে পারেন। /etc/rc.d/crond কল শুরু হয় যখন ফাংশন।


0

আমার এইডব্লিউএসে আমারও একই সমস্যা ছিল। এটি এটি খুঁজে বের

which python3

আমাকে /usr/bin/local/python3লোকেশন দিয়েছে

এবং তারপর

. $HOME/.profile; /usr/local/bin/python3 /home/ubuntu/your_script.py
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.