কীভাবে আমার ক্রোনটবে আমার এলিয়াস ব্যবহার করবেন?


16

আমার কিছু কমান্ড রয়েছে .profileযা আমি আমার কাছ থেকে প্রার্থনা করতে চাই crontab

উদাহরণস্বরূপ, যদি আমার কাছে থাকে,

alias notify-me="~/bin/notify.pl -u user1"
alias notify-team="~/bin/notify.pl -u user1 user2 user3 user4 ...."

আমি শুধু ওরফে ডাকতে চাই

0 11 * * * notify-team

সুতরাং যদি আমার তালিকাটি .profileআপডেট হয় তবে আমাকেও আপডেট করতে হবে crontabনা। যাইহোক, আমার নিজের মধ্যে এলিয়াস ব্যবহার করতে সক্ষম হবে বলে মনে হয় না crontab। এখানে কি কাজ আছে?

পরিবেশ স্থাপনের জন্য আমি এখানে পরামর্শগুলি চেষ্টা করেছি (যেমন / বিন / ব্যাশ-এলসি এবং স্ক্রিপ্ট-র‌্যাপার স্ক্রিপ্ট)। দেখে মনে হচ্ছে এটি স্ক্রিপ্টগুলির জন্য কাজ করে তবে উপকরণ নয়।

কোন ধারনা?


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

উত্তর:


10

এলিয়াস সম্পর্কিত ম্যানপেজ থেকে:

নোট অ্যালিয়াসগুলি অ-ইন্টারেক্টিভ শেলটিতে ডিফল্টরূপে প্রসারিত হয় না,
এবং এটি 'বিস্তৃত_আধিগুলি' সেট করে সক্ষম করা যেতে পারে
শপ বিকল্প ব্যবহার করে শেল্ট।

সুতরাং shopt -s expand_aliasesআপনার সোর্সিং স্ক্রিপ্টের শুরুতে ব্যবহার করার চেষ্টা করুন । এটি আপনাকে ওয়ার্নারের পরামর্শ ব্যবহার করা উচিত।


এটি আমার জন্য ডিফল্টরূপে CentOS5 এ চলছে। কুল নোট যদিও।
ওয়ার্নার 21

সম্ভবত কোনও স্ক্রিপ্টে নেই। ফলাফল পরীক্ষার স্ক্রিপ্ট তৈরি করার চেষ্টা করুন যা ফলস্বরূপ shopt expand_aliases। আমি বাজি ধরছি এটা বন্ধ আছে। এটি আমার RHEL 5.3 বাক্সে রয়েছে।
ক্রিস্টোফার কারেল

তুমি মাথায় পেরেক মারো। +1
ওয়ার্নার

এটি দেখানোর জন্য +1 থেক্স। এটি আমাকে বেশিরভাগ সমাধানের পথে নিয়ে যায় তবে আমি এখনও অন্য একটি ফাইল তৈরি করে শেষ করি। আমি এটা ছাড়া এটি করার আশা ছিল।
কিথ বেনট্রুপ

কিথ, আমারও একই সমস্যা ছিল তবে eval 'foo'ক্রোনটবে করণীয়টি করল।
আর্টেম রাশাকোভস্কিই

6

"উত্স" সহ বাশ-সিটির কাজ করা উচিত:

0 11 * * * bash -c "source .profile && notify-team"

এটি কাজ করতে পারে। পিরিয়ড মানে "উত্স"

0 11 * * * . .profile && notify-team

3

ক্রিস চিহ্নিত হিসাবে, অ-ইন্টারেক্টিভ শেলগুলির জন্য ডিফল্ট শেল বিকল্পটি এলিয়াসগুলি প্রসারিত না করা। আমি এখানে কাজ করার একটি সমাধান পেয়েছি।

একটি স্ক্রিপ্ট লিখুন, শেল বিকল্পটি সক্ষম করুন এবং আপনার ডাকনাম উত্স করুন। .bashrcকার্যকরভাবে সচেতন হোন যে মৃত্যুদন্ড কার্যকর করা হয়, এজন্যই এটি প্রসারিত_লিয়াসগুলি সক্ষম করার পরে আবার উত্সাহিত করতে হবে।

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

লিপি:

#!/bin/bash
shopt -s expand_aliases
source /home/wmoore/.bashrc
notify-team

থেক্স, তবে আমি এটি ইতিমধ্যে চেষ্টা করেছি। আপনি এটি নিশ্চিত করতে পারেন যে এটি আপনার সিস্টেমে কাজ করে? আমি চেষ্টা করেছি / বিন / বাশ-এলসি উত্স। /। প্রোফাইল; টিম এবং অন্যান্য বৈচিত্রগুলি জানান। এছাড়াও আমি প্রতিটি উপনামের জন্য পৃথক স্ক্রিপ্ট না রাখাই পছন্দ করি। এটি সদৃশ এড়ানোর উদ্দেশ্যকে পরাস্ত করে।
কিথ বেন্ট্রপ

ক্রন্টব থেকে ত্রুটিটি আমার অন্তর্ভুক্ত করা উচিত: আমি চেষ্টা করেছি এমন প্রতিটি পরিবর্তনে "কমান্ড পাওয়া যায় নি"।
কিথ বেনট্রপ

পরীক্ষিত প্রস্তাবনা সহ সম্পাদিত।
ওয়ার্নার

আপডেট হওয়া উদাহরণের জন্য Thx। আমি মনে করি আপনি যদি 1 ম লাইনে -l যুক্ত করেন তবে আপনি আপনার 3 য় থেকে মুক্তি পেতে পারেন।
কিথ বেনট্রুপ

আহ্, ভাল কল - লগইন শেলটি প্রসারিত_লিয়াসগুলি সক্ষম করে।
ওয়ার্নার

1

আমি ফাইলটি থেকে উপনামটি ধরে ফেলার এবং তারপরে পুনরায় ব্যবহার করার বিষয়ে আর্টেফেক্সের ধারণা পছন্দ করি, যেহেতু আমি সরাসরি উপাধিকারগুলি প্রসারিত / পুনঃব্যবহারের কোনও উপায় খুঁজে পাই না। (অন্যান্য সমাধানগুলির জন্য এখনও অন্য স্ক্রিপ্টের প্রয়োজন))

তাই আমি এই ফাংশনটি লিখেছি এবং এটি আমার। প্রোফাইলে রেখেছি:

grab-alias () { sed -n '/alias\s*'$1'\s*=/ {s/[^'\'']*.//;s/'\''\s*$//p}' /home/bentrupk/.profile; }

তারপরে আমি এটিকে বিভিন্ন ক্রিয়াকলাপের জন্য আমার ক্রন্টবটিতে ব্যবহার করতে সক্ষম হয়েছি:

0 11 * * * /bin/bash -lc 'x=`grab-alias notify-team`; $x'
0 7 * * * /bin/bash -lc 'x=`grab-alias notify-me`; $x'

প্রভৃতি

হ্যাঁ, কোড পুনরায় ব্যবহার! সবাইকে ধন্যবাদ.


3
এটা খাঁটি মন্দ।
জাস্টিন

আমি যদি সরাসরি ওরফে ব্যবহার করতে পারতাম, আমি করতাম। এটাই প্রশ্নটির মূল বিষয়। আপনাকে অন্য সমাধানের প্রস্তাব দেওয়ার জন্য স্বাগত জানাই, তবে আমি এই সমাধানটি প্রচুর ২-৩ লাইন ফাইলের মধ্যে একটি ডিরেক্টরিকে গুছিয়ে নেব - যা আমি অতিরিক্ত নোটিফিকেশন স্কিম যুক্ত করার সাথে সাথে ঘটবে বা আমার কিছু অন্যান্য উপাত্ত পুনরায় ব্যবহার করার সিদ্ধান্ত নেবে।
কিথ বেনট্রুপ

1

সত্যিই আপনি করতে পারেন সবচেয়ে সহজ জিনিসটি তৈরি করা হবে create

আমাকে bin / বিন / অবহিত করুন -

#!/bin/sh
~/bin/notify.pl -u user1

bin / বিন / অবহিত-দল সহ

#!/bin/sh
~/bin/notify.pl -u user1 user2 user3 user4 ....

শেল অ্যালিয়াসগুলি বজায় রাখা এবং অন্যান্য সিস্টেমে সংহত করার জন্য জটিল, যেমনটি আপনি দেখেছেন complicated করণীয় হ'ল সর্বোত্তম বিষয় হ'ল তাদের পূর্ণ কমান্ডে পরিণত করা যাতে মজার পরিবেশের সমস্যা থাকবে না।


1
পরামর্শের জন্য ধন্যবাদ, তবে আমি কখনই ভাবিনি যে এলিয়াসগুলি রক্ষণাবেক্ষণ করা শক্ত ছিল এবং আমি বরং 1 টির মতো উপাধি রক্ষণ করব তবে প্রচুর মোড়কের ফাইল বজায় রাখব। সমস্যাটি ছিল ক্রোন জব-এ এলিয়াসগুলি চালানো।
কিথ বেনট্রুপ

0

bash -ic "নোটিফাই-দল" সেরা বিকল্প। এটি ক্রোন্টাবের মধ্যে উপাধি উপলব্ধ করে। আপনি আরও ব্যাকগ্রাউন্ডের জন্য যুক্ত করতে পারেন কারণ আমরা -i এর সাথে একটি 'ইন্টারেক্টিভ' শেল ব্যবহার করছি তবে বাস্তবে এটির সাথে ইন্টারঅ্যাক্ট করছি না।


-2
0 11 * * * bash -ic "notify-team" > /log/file

আমার জন্য কাজ কর


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