কীভাবে crontab PATH ভেরিয়েবল সেট করবেন


17

ক্রন্টব থেকে স্ক্রিপ্ট চালাতে আমার সমস্যা হয়েছিল। কিছু গবেষণার পরে আমি বুঝতে পেরেছিলাম সমস্যাটি কারণ প্যাথ প্যারামিটারে / এসবিন অন্তর্ভুক্ত নয়।

আমি এতে দেখেছি যে এটি কীভাবে / ইত্যাদি / ক্রন্টবে অন্তর্ভুক্ত করে:

PATH=/sbin:/bin:/usr/sbin:/usr/bin

পরীক্ষা হিসাবে - PATH ভেরিয়েবল মুদ্রণের জন্য সহজ ক্রোন জব:

* * * * * echo $PATH &> /root/TMP.log

আউটপুটটি হ'ল:

cat /root/TMP.log
/usr/bin:/bin

আমি এই আচরণটি বুঝতে পারি না ... আমি কীভাবে PATH ভেরিয়েবল সেট করব ..? বা আরও ভাল - এটিতে কীভাবে পাথ যুক্ত করা যায়?

উত্তর:


17

তারা একইরকম থাকলেও, কোনও ব্যবহারকারী ক্রন্টাব (ক্রন্টব-ই ব্যবহার করে সম্পাদিত) সিস্টেম ক্রন্টাব থেকে পৃথক পাথ রাখে (সম্পাদনা / ইত্যাদি / সম্পাদনা দ্বারা সম্পাদিত)।

কমান্ডের আগে ব্যবহারকারী নাম সন্নিবেশ করানোতে সিস্টেম ক্রন্টব-এর 7 টি ক্ষেত্র রয়েছে। অন্যদিকে, ব্যবহারকারী ক্রন্টাবের কেবল 6 টি ক্ষেত্র রয়েছে, সময় ক্ষেত্রের সাথে সাথে সরাসরি কমান্ডে যায়।

তেমনি, সিস্টেম ক্রোনট্যাবে থাকা PATH সাধারণত / sbin ডিরেক্টরি অন্তর্ভুক্ত করে, যেখানে ব্যবহারকারী ক্রন্টবায় PATH থাকে না। আপনি যদি ব্যবহারকারী crontab এর জন্য PATH সেট করতে চান তবে আপনাকে ব্যবহারকারী crontab এ PATH ভেরিয়েবলটি নির্ধারণ করতে হবে।


ক্রোনটিতে শেল কমান্ডগুলিতে আপনার নিয়মিত PATH যুক্ত করার জন্য একটি সহজ কাজটি হল লগইন শেলটিতে ব্যাশ চালিয়ে ক্রোনজব আপনার প্রোফাইল উত্স করে source পরিবর্তে উদাহরণস্বরূপ

* * * * * some command

পরিবর্তে আপনি চালাতে পারেন

* * * * * bash -lc some command

যদি আপনার প্রোফাইলটি PATH বা অন্যান্য পরিবেশের ভেরিয়েবলগুলিকে বিশেষ কিছুতে সেট করে তবে এটি আপনার কমান্ডের সাথে অন্তর্ভুক্ত হয়ে যায়।


ধন্যবাদ, যা এটি ব্যাখ্যা করে ... তবে এইভাবে আমি কেবল প্যাট সেট করতে পারি, এবং সম্পাদনা করতে পারি না, কারণ প্যাথ = / এসবিন: AT পথ বা অনুরূপ কাজ করে না। আমি চেষ্টা করেছি ...
csny

হ্যাঁ, আপনাকে PATH কে এই জাতীয় ক্ষেত্রে স্ক্র্যাচ থেকে সংজ্ঞায়িত করতে হবে, এটি যথেষ্ট সহজ হওয়া উচিত, যেহেতু আপনি আপনার ক্রন্টবায় চালিত সমস্ত কমান্ড জানেন, তাই আপনার কেবল সেগুলি বিবেচনায় নেওয়া উচিত।
মটরশুটি

@madumlao bash -lcসাহায্য করে না আমি এখন প্যাথ ম্যানুয়ালি সেট করার জন্য ভাল, তবে আমি যদি কিছু স্ক্রিপ্ট ইনস্টল করি তবে আমি চাই যে সেগুলি পুরো পথগুলি নির্দিষ্ট না করেই ক্রোনজবসে স্বীকৃত হবে। আমি নিশ্চিত যে এটি কোনওভাবেই সম্ভব এবং bash -lcসমাধানের পথে
চলেছে

4
bash -lc একটি লগইন শেল শুরু করে যা আপনার ব্যবহারকারীর প্রোফাইল সূত্র দেয়। এর অর্থ এটি ~ / .Bash_profile, ~ /। প্রোফাইল, বা ~ / .bashrc এ প্যাথ সেট ব্যবহার করে ... আপনার কি সেখানে পথ নির্ধারণ করা আছে? যদি তাই হয় এবং এটির পক্ষে খারাপ উত্তর আসে তবে এর জন্য আমার উত্তরটি আপডেট করুন
মাদামলও

গ্রেট। ধন্যবাদ মাদুনলাও। আমি ম্যানুয়ালি বিন ফাইল ফোল্ডারটি ~ / .bash_profile এ যুক্ত করার পরে, আমার ক্রোনজব ভাল কাজ করে।
张健健

8

আপনার যদি ডিফল্ট সিস্টেমের বিস্তৃত PATHs এবং অন্যান্য ENV ভেরিয়েবলগুলির প্রয়োজন হয় (যা /etc/profile.d এ সংজ্ঞায়িত করা হয়) তবে কেবল নিম্নলিখিতটি লিখুন:

* * * * * . /etc/profile; your cmd

3

ক্রোনজব লাইনে বা একক লাইনে PATH (বা অন্যান্য পরামিতি) সেট করা সম্ভব। তবে আপনি শেল প্রসারণের মতো ব্যবহার করতে সক্ষম নন PATH=$PATH:/usr/local/bin। তবে টিলডিকে হোম ডিরেক্টরি শর্টকাটের জন্য অনুমোদিত।

বই থেকে:

ক্রন্টব-এ একটি সক্রিয় লাইন হয় পরিবেশ সেটিং বা ক্রোন কমান্ড। পরিবেশের সেটিংটি ফর্মটির মধ্যে রয়েছে: নাম = মান যেখানে সমান চিহ্ন (=) এর চারপাশে সাদা স্পেসগুলি alচ্ছিক এবং মান অনুসারে পরবর্তী যে কোনও অ-নেতৃস্থানীয় সাদা স্পেসগুলি নাম নির্ধারিত মানের একটি অংশ। শীর্ষস্থানীয় বা পিছনের সাদা জায়গাগুলি সংরক্ষণের জন্য মান স্ট্রিংটি উদ্ধৃতিতে (একক বা দ্বিগুণ, তবে মিলছে) স্থাপন করা যেতে পারে।

দেখুন man 5 crontabআরও তথ্যের জন্য।

সুতরাং এটি কাজ করা উচিত:

PATH=/bin:/usr/bin:/my/path/bin
5 3 * * * command_that_requires_my_path

0

আমারও একই সমস্যা ছিল এবং আমি আমার স্ক্রিপ্টটি ক্রন্টেব চালানোর জন্য অন্য উপায় খুঁজে পেয়েছি। আমি মনে করি আপনার প্রোগ্রামটি চালানোর সবচেয়ে সহজ উপায় হ'ল এমন একটি স্ক্রিপ্ট তৈরি করা যা আপনার প্রোগ্রামের ডিরেক্টরিতে সিডি করতে পারে । তারপরে সেই স্ক্রিপ্টে আপনার প্রোগ্রামটি কল করুন।

এটি কোনও স্ক্রিপ্টের উদাহরণ (স্ক্রিপ্টের নাম = লঞ্চার.শ):

#!bin/bash
cd /home/pi/test
sudo python3 example.py

তারপরে, আপনার স্ক্রিপ্টটি কার্যকরযোগ্য করুন:

chmod 755 launcher.sh

এবং শেষ পর্যন্ত, আপনার স্ক্রিপ্টটি ক্রোনটবটিতে যুক্ত করুন

crontab -e

এবং শেষে এই লাইনটি যুক্ত করুন:

@reboot sh /home/pi/test/launcher.sh

(আমি প্রতিটি রিবুট চালানোর জন্য প্রোগ্রামটি সেট করেছি)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.