ক্রোন ব্যবহারকারীর পাথ ব্যবহার করে না যার ক্রন্টাব এটি এবং পরিবর্তে এর নিজস্ব রয়েছে। PATH=/foo/barক্রন্টাবের শুরুতে এটি যোগ করে সহজেই পরিবর্তন করা যেতে পারে এবং ক্লাসিক ওয়ার্কআরআন্ড হ'ল ক্রোন দ্বারা চালিত কমান্ডগুলির জন্য সর্বদা পাথ ব্যবহার করা, তবে ক্রোনটির ডিফল্ট PATH সংজ্ঞা কোথায়?
আমি আমার আর্চ সিস্টেমে নিম্নলিখিত বিষয়বস্তুগুলির সাথে ক্রোনটব তৈরি করেছি (ক্রোনি 1.5.1-1-1) এবং একই ফলাফল সহ একটি উবুন্টু 16.04.3 এলটিএস বক্সেও পরীক্ষা করেছি:
$ crontab -l
* * * * * echo "$PATH" > /home/terdon/fff
মুদ্রিত:
$ cat fff
/usr/bin:/bin
কিন্তু কেন? ডিফল্ট সিস্টেম-প্রশস্ত পথ সেট করা আছে /etc/profileতবে এতে অন্যান্য ডিরেক্টরি অন্তর্ভুক্ত রয়েছে:
$ grep PATH= /etc/profile
PATH="/usr/local/sbin:/usr/local/bin:/usr/bin"
প্রাসঙ্গিক অন্য কিছুই নেই /etc/environmentবা /etc/profile.d, অন্যান্য ফাইল আমি ভেবেছিলাম সম্ভবত ক্রন দ্বারা পড়া হতে পারে:
$ grep PATH= /etc/profile.d/* /etc/environment
/etc/profile.d/jre.sh:export PATH=${PATH}:/usr/lib/jvm/default/bin
/etc/profile.d/mozilla-common.sh:export MOZ_PLUGIN_PATH="/usr/lib/mozilla/plugins"
/etc/profile.d/perlbin.sh:[ -d /usr/bin/site_perl ] && PATH=$PATH:/usr/bin/site_perl
/etc/profile.d/perlbin.sh:[ -d /usr/lib/perl5/site_perl/bin ] && PATH=$PATH:/usr/lib/perl5/site_perl/bin
/etc/profile.d/perlbin.sh:[ -d /usr/bin/vendor_perl ] && PATH=$PATH:/usr/bin/vendor_perl
/etc/profile.d/perlbin.sh:[ -d /usr/lib/perl5/vendor_perl/bin ] && PATH=$PATH:/usr/lib/perl5/vendor_perl/bin
/etc/profile.d/perlbin.sh:[ -d /usr/bin/core_perl ] && PATH=$PATH:/usr/bin/core_perl
/etc/skelআশ্চর্যজনকভাবে কোনও /etc/cron*ফাইলের সাথেও প্রাসঙ্গিক কিছু নেই বা এটি কোনও ফাইলে সেট করা হচ্ছে না :
$ grep PATH /etc/cron* /etc/cron*/*
grep: /etc/cron.d: Is a directory
grep: /etc/cron.daily: Is a directory
grep: /etc/cron.hourly: Is a directory
grep: /etc/cron.monthly: Is a directory
grep: /etc/cron.weekly: Is a directory
/etc/cron.d/0hourly:PATH=/sbin:/bin:/usr/sbin:/usr/bin
সুতরাং, যেখানে ব্যবহারকারী ক্রন্টাবগুলি জন্য ক্রোনের ডিফল্ট PATH সেট করা আছে? এটি কি cronনিজেই হার্ডকোডযুক্ত ? এটি কি এর জন্য কোনও ধরণের কনফিগারেশন ফাইলটি পড়ে না?
/etc/profileকারণ এটি নিজের var=valueমতো একই বাক্য গঠন ( ) ব্যবহার cronকরে, তাই এটি করার পক্ষে যথেষ্ট সহজ হবে এবং /etc/profileআমার জ্ঞানের পক্ষে এটি খুব বিস্তৃত। আমাকে অবাক করে দেওয়ার বিষয়টি হ'ল আমি এটি কোথাও সেট করা অবস্থায় দেখতে পেলাম না তাই দেখে মনে হচ্ছিল এটি হার্ড কোডেড। প্রকৃতপক্ষে যেমনটি ঘটেছে, তেমন স্টিফেন নীচে ব্যাখ্যা করেছেন।
zshতাদের ইন্টারেক্টিভ শেল হিসাবে ব্যবহার করে না /etc/profile(যা নির্দিষ্ট করে bash) সে সম্পর্কে চিন্তা করে না
profileফাইল কেবল লগইন শেলগুলিই পড়তে পারে, যাইহোক। এগুলি ইন্টারেক্টিভ হতে পারে বা নাও হতে পারে।
stringsকোনও প্রোগ্রামের বিরুদ্ধে চালানো এই হার্ড-কোডড মানগুলিও সন্ধান করতে সহায়তা করে।
cronদেখার জন্য/etc/profile, বা যত্ন নেওয়ার কোনও কারণ নেই । একটি ভাল প্রশ্ন হল কেন নাcronপড়াPATHথেকেlogin.defs(লিনাক্সের দিকে) অথবাlogin.conf(* বাসদ তে) খুলুন। আমি মনে করি এটি শেষ পর্যন্ত একটি বাস্তবায়ন বিশদ।