ক্রোনটাবের সম্পাদক (ক্রন্টব-ই) ব্যবহার না করে ক্রোন জব তৈরির পক্ষে যুক্তি রয়েছে কি? যদি তা হয় তবে বাশ স্ক্রিপ্ট থেকে কোডটি ক্রোনজব তৈরি করে কী হবে?
ক্রোনটাবের সম্পাদক (ক্রন্টব-ই) ব্যবহার না করে ক্রোন জব তৈরির পক্ষে যুক্তি রয়েছে কি? যদি তা হয় তবে বাশ স্ক্রিপ্ট থেকে কোডটি ক্রোনজব তৈরি করে কী হবে?
উত্তর:
আপনি ক্রন্টবটিতে নিম্নলিখিত হিসাবে যুক্ত করতে পারেন:
#write out current crontab
crontab -l > mycron
#echo new cron into cron file
echo "00 09 * * 1-5 echo hello" >> mycron
#install new cron file
crontab mycron
rm mycron
* * * * * "command to be executed"
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)
উত্স nixCraft ।
(crontab -l ; echo "00 09 * * 1-5 echo hello") | crontab -
- এডোর উত্তরটি অনুলিপি করা সহজ
;
সঙ্গে &&
কেস যদি বিরুদ্ধে একটি নিরাপদ-রক্ষী হিসেবে crontab -l
ব্যর্থ। সুতরাং, যেমন:(crontab -l && echo "0 0 0 0 0 some entry") | crontab -
crontab -l
কোনও ক্রন্টব না থাকলে ব্যর্থ হয়, তাই &&
স্ক্রিপ্টটির জন্য ক্রন্টব- এ প্রথম প্রবেশকে যুক্ত করা অসম্ভব করে তোলে।
আপনি ফ্লাইটে এটি করতে সক্ষম হতে পারেন
crontab -l | { cat; echo "0 0 0 0 0 some entry"; } | crontab -
crontab -l
বর্তমান ক্রন্টব কাজগুলি তালিকাভুক্ত করে, cat
এটি মুদ্রণ করে, echo
নতুন কমান্ড মুদ্রণ করে এবং crontab -
সমস্ত মুদ্রিত সামগ্রী ক্রন্টব ফাইলটিতে যুক্ত করে। আপনি একটি নতুন করে প্রভাব দেখতে পারেন crontab -l
।
crontab -l
বর্তমান ক্রন্টব জব তালিকাবদ্ধ করে, cat
এটি মুদ্রণ করে, echo
নতুন কমান্ড মুদ্রণ করে এবং crontab -
সমস্ত মুদ্রিত সামগ্রী ক্রন্টব ফাইলটিতে যুক্ত করে। আপনি একটি নতুন করে প্রভাবটি দেখতে পাচ্ছেনcrontab -l
no crontab for <username>
তবে এটি যেভাবেই চলবে।
(crontab -l ; echo "00 09 * * 1-5 echo hello") | crontab -
কাজ করে।
এই সংক্ষিপ্তর জন্য কোনও অস্থায়ী ফাইলের প্রয়োজন নেই, এটি একাধিক সন্নিবেশের জন্য প্রতিরোধক এবং এটি আপনাকে বিদ্যমান প্রবেশের শিডিয়ুল পরিবর্তন করতে দেয়।
বলুন আপনার এগুলি রয়েছে:
croncmd="/home/me/myfunction myargs > /home/me/myfunction.log 2>&1"
cronjob="0 */15 * * * $croncmd"
এটিকে ক্রন্টবে যুক্ত করতে, কোনও সদৃশ ছাড়াই:
( crontab -l | grep -v -F "$croncmd" ; echo "$cronjob" ) | crontab -
এটি বর্তমানের সময়সূচী যাই হোক না কেন ক্রন্টব থেকে তা অপসারণ করতে:
( crontab -l | grep -v -F "$croncmd" ) | crontab -
মন্তব্য:
আপনার সহায়তার জন্য সবাইকে ধন্যবাদ। আমি এখানে এবং অন্য কোথাও যা পেয়েছি তা এক সাথে পাইকিং করে আমি এটিকে সামনে নিয়ে এসেছি:
command="php $INSTALL/indefero/scripts/gitcron.php"
job="0 0 * * 0 $command"
cat <(fgrep -i -v "$command" <(crontab -l)) <(echo "$job") | crontab -
আমি নিজেকে পুনরাবৃত্তি না করে কীভাবে দুটি ভেরিয়েবলের প্রয়োজনীয়তা দূর করতে পারি তা বুঝতে পারি না।
command
স্পষ্টতই আমি যে কমান্ডটি নির্ধারণ করতে চাই তা হ'ল। job
লাগে$command
সময়সূচী ডেটা এবং যুক্ত করে। কোডের লাইনে আমার কাজ দুটি চলক পৃথক প্রয়োজন।
<(*command*)
) এর crontab -l
ইনপুট আউটপুটটি ইনপুটতে পরিণত করতে ব্যবহার করিfgrep
কমান্ডের ।fgrep
তারপরে $command
( -v
বিকল্প) যেকোন ম্যাচ ফিল্টার করে , কেস-সংবেদনশীল (-i
বিকল্প) এর ।<(*command*)
) ব্যবহারের জন্য ফলাফলটিকে ইনপুটতে ফিরে পরিবর্তন করতে ব্যবহৃত হয়cat
কমান্ডের ।cat
কমান্ড এছাড়াও পায় echo "$job"
(স্ব ব্যাখ্যামূলক), আবার, পুনর্নির্দেশ অপরিচিত এর ব্যবহার (মাধ্যমে<(*command*)
)।crontab -l
এবং সরল echo "$job"
, মিলিত, পাইপ করা হয় ('|') শেষ crontab -
পর্যন্ত লেখার জন্য।এই লাইন কোডটি কমান্ডের সাথে মেলে এমন কোনও ক্রোন জবগুলি ফিল্টার করে, তারপরে নতুন একটি দিয়ে অবশিষ্ট ক্রোন জবগুলি লিখে দেয়, কার্যকরভাবে একটি "অ্যাড" বা "আপডেট" ফাংশনের মতো অভিনয় করে। এটি ব্যবহার করার জন্য, সব আপনাকে যা করতে হবে আউট মান swap 'র হয় command
এবং job
ভেরিয়েবল।
fgrep -v
crontab -l | fgrep -i -v "$command" | { cat; echo "$job"; } | crontab -l
সম্পাদনা (স্থির ওভাররাইটিং):
cat <(crontab -l) <(echo "1 2 3 4 5 scripty.sh") | crontab -
crontab -l
ব্যর্থ হয়, তবে crontab -
সফল হয় তবে আপনার ক্রোনটাবটি ওয়ান-লাইনার হবে।
ক্রন্টব ব্যবহারের চারপাশে প্রচুর ভাল উত্তর এসেছে, তবে ব্যবহারের মতো সহজ পদ্ধতির কোনও উল্লেখ নেই cron
।
ব্যবহার cron
সিস্টেম ফাইল এবং এ অবস্থিত ডিরেক্টরি সদ্ব্যবহার করবে /etc/crontab
, /etc/cron.daily,weekly,hourly
বা /etc/cron.d/
:
cat > /etc/cron.d/<job> << EOF
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root HOME=/
01 * * * * <user> <command>
EOF
উপরের এই উদাহরণে, আমরা একটি ফাইল তৈরি করেছি /etc/cron.d/
, কমান্ডটি সফলভাবে সম্পাদন করার জন্য পরিবেশের ভেরিয়েবল সরবরাহ করেছি user
এবং কমান্ডটির জন্য এবংcommand
নিজেই সরবরাহ করেছি। এই ফাইলটি কার্যকর করা উচিত নয় এবং নামটিতে কেবল আলফা-সংখ্যাসূচক এবং হাইফেন থাকতে হবে (নীচে আরও বিশদ)।
যদিও একটি সংক্ষিপ্ত উত্তর দিতে, আসুন crontab
বনামের মধ্যে পার্থক্যগুলি দেখুন cron/crond
:
crontab -- maintain tables for driving cron for individual users
যারা সিস্টেমে তাদের ব্যবহারকারীর প্রসঙ্গে চাকরীটি চালাতে চান তাদের crontab
জন্য সঠিক ধারণা তৈরি করতে পারে।
cron -- daemon to execute scheduled commands
যারা কনফিগারেশন পরিচালনা ব্যবহার করেন বা অন্য ব্যবহারকারীর জন্য কাজ পরিচালনা করতে চান তাদের ক্ষেত্রে আমাদের ব্যবহার করা উচিত cron
।
মানচিত্রগুলি থেকে একটি দ্রুত উদ্ধৃতি আপনাকে করণীয় এবং কী করবেন না তার কয়েকটি উদাহরণ দেয়:
/ etc / crontab এবং /etc/cron.d এ থাকা ফাইলগুলি অবশ্যই মূলের মালিকানাধীন হওয়া আবশ্যক এবং এগুলি গ্রুপ- বা অন্যান্য লিখনযোগ্য হবে না। স্পুল ক্ষেত্রের বিপরীতে, /etc/cron.d এর অধীনে থাকা ফাইলগুলি বা /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly এবং /etc/cron.monthly ফাইলগুলিও হতে পারে symlinks, প্রদত্ত যে উভয় sylink এবং ফাইল এটি নির্দেশ করে যা মূলের মালিকানাধীন। /Etc/cron.d এর অধীন ফাইলগুলি সম্পাদনযোগ্য হওয়ার দরকার নেই, যখন /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly এবং /etc/cron.monthly ফাইলগুলি যেমন করে এগুলি রান-পার্টস দ্বারা চালিত হয় (আরও তথ্যের জন্য রান-পার্টস দেখুন (8))।
সূত্র: http://manpages.ubuntu.com/manpages/trusty/man8/cron.8.html
সিস্টেমের দৃষ্টিকোণ থেকে ক্রোনকে এই পদ্ধতিতে পরিচালনা করা সহজ এবং আরও মাপের বিষয়, তবে সর্বদা সেরা সমাধান হতে পারে না।
<job>
কোনও ফাইল এক্সটেনশন অন্তর্ভুক্ত করা উচিত নয়।
সম্ভাবনা হ'ল আপনি এটিকে স্বয়ংক্রিয় করছেন এবং আপনি একটি কাজও দুটিবার যুক্ত করতে চান না। সেক্ষেত্রে ব্যবহার করুন:
__cron="1 2 3 4 5 /root/bin/backup.sh"
cat <(crontab -l) |grep -v "${__cron}" <(echo "${__cron}")
আপনি কেবল বেস ব্যবহার করছেন তবে এটি কেবল কাজ করে। আমি সঠিক ড্যাশ সম্পর্কে সচেতন নই (sh
) সিনট্যাক্স ।
আপডেট: ব্যবহারকারীর কাছে এখনও ক্রন্টব না থাকলে এটি কাজ করে না। আরও নির্ভরযোগ্য উপায় হ'ল:
(crontab -l ; echo "1 2 3 4 5 /root/bin/backup.sh") | sort - | uniq - | crontab -
বিকল্পভাবে, যদি আপনার ডিস্ট্রো এটি সমর্থন করে তবে আপনি একটি পৃথক ফাইলও ব্যবহার করতে পারেন:
echo "1 2 3 4 5 /root/bin/backup.sh" |sudo tee /etc/crond.d/backup
অন্য এসও প্রশ্নে সেগুলি খুঁজে পেয়েছে ।
sh: 1: Syntax error: "(" unexpected
ব্যবহার করা হচ্ছে ।
<
এবং (
। এর অর্থ < (
ব্যর্থ তবে <(
কাজ করে, যদি না আপনার সময়সূচীটিতে তারকাচিহ্ন থাকে ...
cat <(crontab -l |grep -v "${CRON}") <(echo "${CRON}") | crontab -
একটি বৈকল্পিক যা পছন্দসই স্ট্রিংটি সেখানে পাওয়া না গেলে কেবল ক্রন্টাব সম্পাদনা করে:
CMD="/sbin/modprobe fcpci"
JOB="@reboot $CMD"
TMPC="mycron"
grep "$CMD" -q <(crontab -l) || (crontab -l>"$TMPC"; echo "$JOB">>"$TMPC"; crontab "$TMPC")
আপনি যদি ভিক্সি ক্রোন ব্যবহার করেন, যেমন বেশিরভাগ লিনাক্স বিতরণে, আপনি পৃথক ক্রোনজব দিয়ে কেবল একটি ফাইল /etc/cron.d এ রাখতে পারেন।
এটি কেবল অবশ্যই মূলের জন্য কাজ করে। যদি আপনার সিস্টেম এটি সমর্থন করে তবে আপনাকে সেখানে কয়েকটি উদাহরণ দেখতে হবে। (পুরানো / ইত্যাদি / ক্রন্টবের মতো একই বাক্য গঠনে লাইনে অন্তর্ভুক্ত থাকা ব্যবহারকারীর নামটি নোট করুন)
ক্রোনটিতে এটি একটি দু: খজনক ভুল ধারণা যে এটি নিয়মিত ব্যবহারকারী হিসাবে হ্যান্ডেল করার কোনও উপায় নেই এবং অনেক ক্রোন বাস্তবায়নের এটিকে হ্যান্ডেল করার কোনও উপায় নেই।
সুতরাং, ডেবিয়ান, উবুন্টু এবং আরও অনেক অনুরূপ ডেবিয়ান ভিত্তিক ডিস্ট্রো ...
একটি ক্রোন টাস্ক কনটেনটেশন মেকানিজম রয়েছে যা একটি কনফিগার ফাইল নিয়ে যায়, সেগুলি বান্ডিল করে এবং আপনার ক্রোন পরিষেবা চলতে যোগ করে।
আপনি /etc/cron.d/somefilename এর অধীনে একটি ফাইল রাখতে পারেন যেখানে আপনি চাইলে কিছু ফাইলফিলাম হয়।
sudo echo "0,15,30,45 * * * * ntpdate -u time.nist.gov" >> /etc/cron.d/vmclocksync
আসুন এটি বিচ্ছিন্ন করুন:
sudo - কারণ / ইত্যাদি ডিরেক্টরিতে ক্রোন কনফিগারেশন পরিবর্তন করতে আপনার উন্নত সুবিধাগুলি প্রয়োজন
প্রতিধ্বনি - স্ট্যান্ড আউট আউটপুট তৈরি করার জন্য একটি বাহন। প্রিন্টফ, বিড়াল ... পাশাপাশি কাজ করবে
"- আপনার স্ট্রিংয়ের শুরুতে একটি ডাবলকোট ব্যবহার করুন, আপনি পেশাদার
0,15,30,45 * * * * - স্ট্যান্ডার্ড ক্রোন রান সূচি, এটি প্রতি 15 মিনিটে চলে
ntpdate -u time.nist.gov - আসল কমান্ডটি আমি চালাতে চাই
"- কারণ আমার প্রথম ডাবল উদ্ধৃতিগুলিকে আউটপুট হিসাবে লাইনটি বন্ধ করতে একটি বন্ধু দরকার
>> - ওভাররাইটের পরিবর্তে ডাবল পুনঃনির্দেশ সংযোজন *
/etc/cron.d/vmclocksync - vmclocksync আমার দ্বারা নির্বাচিত ফাইলের নাম, এটি /etc/cron.d/ এ যায়
* আমরা যদি> পুনঃনির্দেশ ব্যবহার করি তবে আমরা গ্যারান্টি দিতে পারি যে আমাদের কেবল একটি টাস্ক এন্ট্রি ছিল। তবে, আমরা বিদ্যমান ফাইলে অন্য কোনও নিয়ম উড়িয়ে দেওয়ার ঝুঁকিতে পড়ব। > এর সাথে সম্ভাব্য ধ্বংসটি যদি সঠিক হয় তবে >> এর সাথে সম্ভাব্য নকলগুলি আপনার পক্ষে থাকলে আপনি নিজেই সিদ্ধান্ত নিতে পারেন। বিকল্পভাবে, আপনি ফাইলের নাম উপস্থিত রয়েছে কিনা তা যাচাই করার জন্য, আপনি কোনও সংশ্লেষিত বা জড়িত কিছু করতে পেরেছিলেন এবং এতে কোনও নকল যোগ করছেন কিনা - তবে, আমার কিছু করার আছে এবং আমি এটি করতে পারি না আপনি এখনই।
ইন্টারেক্টিভ সম্পাদক ছাড়া ক্রোন জব যুক্ত করার জন্য স্ক্রিপ্টে বাশ করুন। নীচে কোড লিনাক্স ফাইল ব্যবহার করে ক্রোনজব যুক্ত করতে সহায়তা করে।
#!/bin/bash
cron_path=/var/spool/cron/crontabs/root
#cron job to run every 10 min.
echo "*/10 * * * * command to be executed" >> $cron_path
#cron job to run every 1 hour.
echo "0 */1 * * * command to be executed" >> $cron_path
crontab
সদৃশ ছাড়াই কমান্ড যুক্ত করার জন্য এখানে একটি বাশ ফাংশন
function addtocrontab () {
local frequency=$1
local command=$2
local job="$frequency $command"
cat <(fgrep -i -v "$command" <(crontab -l)) <(echo "$job") | crontab -
}
addtocrontab "0 0 1 * *" "echo hello"
CRON="1 2 3 4 5 /root/bin/backup.sh"
cat < (crontab -l) |grep -v "${CRON}" < (echo "${CRON}")
গ্রেপ সঠিক কমান্ডে -w পরামিতি যুক্ত করুন, -w পরামিতি ছাড়াই ক্রোনজব "টেস্টিং" ক্রোন জব মুছে ফেলার কারণ "টেস্টিং 123"
ক্রোনজবস যুক্ত / সরানোর জন্য স্ক্রিপ্ট ফাংশন। কোনও সদৃশ এন্ট্রি নেই:
cronjob_editor () {
# usage: cronjob_editor '<interval>' '<command>' <add|remove>
if [[ -z "$1" ]] ;then printf " no interval specified\n" ;fi
if [[ -z "$2" ]] ;then printf " no command specified\n" ;fi
if [[ -z "$3" ]] ;then printf " no action specified\n" ;fi
if [[ "$3" == add ]] ;then
# add cronjob, no duplication:
( crontab -l | grep -v -F -w "$2" ; echo "$1 $2" ) | crontab -
elif [[ "$3" == remove ]] ;then
# remove cronjob:
( crontab -l | grep -v -F -w "$2" ) | crontab -
fi
}
cronjob_editor "$1" "$2" "$3"
পরীক্ষিত:
$ ./cronjob_editor.sh '*/10 * * * *' 'echo "this is a test" > export_file' add
$ crontab -l
$ */10 * * * * echo "this is a test" > export_file
এটির জন্য আমার পছন্দসই সমাধানটি হ'ল:
(crontab -l | grep . ; echo -e "0 4 * * * myscript\n") | crontab -
এটি নিশ্চিত করবে যে আপনি নীচের দিকে ফাঁকা নতুন লাইনটি সঠিকভাবে পরিচালনা করছেন। ক্রন্টাবের সমস্যাগুলি এড়াতে আপনার সাধারণত খালি নতুন লাইনের সাহায্যে ক্রন্টব ফাইলটি শেষ করা উচিত। এবং উপরের স্ক্রিপ্টটি নিশ্চিত করে যে এটি প্রথমে "গ্রেপ" দিয়ে কোনও ফাঁকা রেখা সরিয়ে ফেলে। অংশ, এবং তারপরে স্ক্রিপ্টের শেষে "\ n" দিয়ে একটি নতুন ফাঁকা লাইনে যুক্ত করুন। এটি যদি আপনার বিদ্যমান ক্রন্টব ফাইলটি ফাঁকা রেখার সাথে শেষ হয় তবে এটি আপনার নতুন কমান্ডের উপরে একটি ফাঁকা রেখা পাওয়া রোধ করবে।
echo "0 * * * * docker system prune --force >/dev/null 2>&1" | sudo tee /etc/cron.daily/dockerprune
না, ক্রোন ফাইলগুলিতে সংশোধন করার জন্য ক্রন্টবায় কোনও বিকল্প নেই।
আপনাকে করতে হবে: বর্তমান ক্রোন ফাইলটি (ক্রন্টব-ল> নতুন ফাইল) নিতে হবে, এটি পরিবর্তন করে নতুন ফাইলটি স্থাপন করতে হবে (ক্রন্টব নিউফিলি)।
আপনি যদি পার্লের সাথে পরিচিত হন তবে আপনি এই মডিউলটি কনফিগার করুন :: ক্রন্টব ব্যবহার করতে পারেন ।
এলএলপি, আন্দ্রে
ক্রোনজবস যুক্ত করতে স্ক্রিপ্ট ফাংশন। সদৃশ এন্ট্রি, ব্যবহারযোগ্য এক্সপ্রেশন *> "পরীক্ষা করুন
cronjob_creator () {
# usage: cronjob_creator '<interval>' '<command>'
if [[ -z $1 ]] ;then
printf " no interval specified\n"
elif [[ -z $2 ]] ;then
printf " no command specified\n"
else
CRONIN="/tmp/cti_tmp"
crontab -l | grep -vw "$1 $2" > "$CRONIN"
echo "$1 $2" >> $CRONIN
crontab "$CRONIN"
rm $CRONIN
fi
}
পরীক্ষিত:
$ ./cronjob_creator.sh '*/10 * * * *' 'echo "this is a test" > export_file'
$ crontab -l
$ */10 * * * * echo "this is a test" > export_file
উত্স: আমার মস্তিষ্ক;)
আপনি সম্ভবত এডিট করতে ডিফল্ট সম্পাদকটি পরিবর্তন করতে পারেন এবং সম্পাদনার জন্য একটি হেরডোক ব্যবহার করতে পারেন।
EDITOR=ed
export EDITOR
crontab -e << EOF
> a
> * * * * * Myscript
> * * * * * AnotherScript
> * * * * * MoreScript
> .
> w
> q
> EOF
অগ্রণী নোট করুন > কোডটির অর্থ হল একটি নতুন লাইন তৈরি করতে রিটার্ন / এন্টার কী টিপানো হয়েছে।
একটি উপায়ে যাতে সংযোজন করুন সেটি মুছে কিছু করবে না।
দ । মানে আপনি সম্পাদনা শেষ করেছেন।
W উপায়ে পরিবর্তন লেখ।
কুই মানে প্রস্থান করে অথবা প্রস্থান ইডি।
আপনি এটা চেক আউট করতে পারেন
crontab -l
আপনি একটি এন্ট্রিও মুছতে পারেন।
EDITOR=ed
export EDITOR
crontab -e << EOF
> /Myscript/
> d
> .
> w
> q
> EOF
এটি এতে মাইক্রিপ্টের সাহায্যে ক্রন্টব এন্ট্রি মুছে ফেলবে।
ঘ মানে ভিতরে প্যাটার্ন মুছতে / / ।
আবার এটি পরীক্ষা করে দেখুন
crontab -l
এই সমাধান একটি স্ক্রিপ্ট ভিতরে খুব কম কাজ করে > কোর্স :-)