कैसे मेरे crontab में मेरे उपनाम का उपयोग करें?


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

एलियासेस के बारे में मैनपेज से:

नोट अलाइंस का उपयोग गैर-संवादात्मक शेल में डिफ़ॉल्ट रूप से नहीं किया जाता है,
और इसे 'extension_aliases' सेट करके सक्षम किया जा सकता है
दुकान का उपयोग कर खोल विकल्प।

इसलिए shopt -s expand_aliasesअपनी सोर्सिंग स्क्रिप्ट की शुरुआत में उपयोग करने का प्रयास करें। इससे आपको वार्नर के सुझाव का उपयोग करना चाहिए।


यह डिफ़ॉल्ट रूप से CentOS5 पर मेरे लिए है। हालांकि कूल नोट।
वॉर्नर

शायद एक स्क्रिप्ट में नहीं, हालांकि। एक परीक्षण स्क्रिप्ट बनाने का प्रयास करें जो आउटपुट करता है shopt expand_aliases। मैं शर्त लगा रहा हूँ कि यह बंद है। यह मेरे आरएचईएल 5.3 बॉक्स में है।
क्रिस्टोफर कारेल

तुमने सिर पर कील ठोक दी है। +1
वार्नर

इसे इंगित करने के लिए +1 Thx। यह मुझे एक समाधान के लिए सबसे अधिक तरीका है, लेकिन मैं अभी भी एक और फ़ाइल बनाने के लिए समाप्त होता है। मैं इसके बिना करने की उम्मीद कर रहा था।
कीथ बेंट्रुप

कीथ, मैं एक ही मुद्दा था, लेकिन eval 'foo'crontab में कर ने चाल चली।
आर्टेम रसाकोवस्की

6

bash -c को "स्रोत" से काम करना चाहिए:

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, लेकिन मैंने पहले ही कोशिश की है। क्या आप पुष्टि कर सकते हैं कि यह आपके सिस्टम पर काम करता है? मैंने भी कोशिश की है / बिन / bash -lc स्रोत ~ / .profile; अधिसूचित टीम और अन्य बदलाव। इसके अलावा, मैं प्रत्येक उपनाम के लिए एक अलग स्क्रिप्ट नहीं रखना पसंद करता हूं। जो नकल से बचने के उद्देश्य को परास्त करता है।
कीथ बेंट्रुप

मुझे crontab से त्रुटि को शामिल करना चाहिए था: "हर कोशिश पर मैंने जो कोशिश की है, उस पर" कमांड नहीं मिला।
कीथ बेंट्रुप

एक परीक्षण की सिफारिश के साथ संपादित।
वॉर्नर

अद्यतन उदाहरण के लिए Thx। मुझे लगता है कि यदि आप अपनी पहली पंक्ति में -l जोड़ते हैं तो आप अपने 3 जी से छुटकारा पा सकते हैं।
कीथ बेंट्रुप

आह, अच्छा कॉल-- लॉगिन खोल का विस्तार किया गया है।
वॉर्नर

1

मुझे आर्टिफ़ैक्स का फ़ाइल से उर्फ ​​को हथियाने और फिर इसका पुन: उपयोग करने का विचार पसंद है, क्योंकि मुझे सीधे एलियास का विस्तार / पुन: उपयोग करने का कोई तरीका नहीं मिला। (अन्य समाधान अभी भी एक और स्क्रिप्ट की आवश्यकता है।)

इसलिए मैंने इस फ़ंक्शन को लिखा और इसे अपने .profile में डाल दिया:

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

फिर मैं इस तरह से विभिन्न उपनामों के लिए अपने crontab में इसका उपयोग करने में सक्षम था:

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

आदि।

याय, कोड पुन: उपयोग! सबको शुक्रीया।


3
यह शुद्ध बुराई है।
जस्टिन

यदि मैं सीधे उपनाम का उपयोग कर सकता हूं, तो मैं करूंगा। यह सवाल का मुद्दा है। आप किसी अन्य समाधान का प्रस्ताव देने के लिए स्वागत कर रहे हैं, लेकिन मैं इस समाधान को बहुत सी 2-3 लाइन फाइलों पर ले जाऊंगा, जो एक निर्देशिका को अव्यवस्थित कर रही हैं - जो कि अतिरिक्त अधिसूचना योजनाओं को जोड़ने या मेरे कुछ अन्य उपनामों का पुन: उपयोग करने का निर्णय लेने पर होगा।
कीथ बेंट्रुप

1

वास्तव में सबसे आसान काम जो आप कर सकते हैं, वह होगा

~ / बिन / सूचित-मेरे साथ

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

~ / बिन / सूचना-टीम के साथ

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

शेल उपनामों को बनाए रखने और अन्य प्रणालियों में एकीकृत करने के लिए जटिल है, जैसा कि आपने देखा है। सबसे अच्छी बात यह है कि उन्हें पूर्ण रूप से विकसित कमांड में बदल दिया जाए, जिसमें मजाकिया पर्यावरण के मुद्दे नहीं होंगे।


1
सुझाव के लिए धन्यवाद, लेकिन मैंने कभी नहीं सोचा था कि एलियंस को बनाए रखना मुश्किल है, और मैं इसके बजाय उपनाम की 1 फ़ाइल बनाए रखूंगा फिर बहुत सारी रैपर फाइलें बनाए रखूंगा। समस्या क्रॉन जॉब में उपनामों को निष्पादित कर रही थी।
कीथ बेंट्रुप

0

बैश -ic "सूचित-टीम" सबसे अच्छा विकल्प है। यह कंटेस्टेंट में उर्फ ​​को उपलब्ध कराता है। आप पृष्ठभूमि के लिए और भी जोड़ सकते हैं, क्योंकि हम -i के साथ 'इंटरएक्टिव' शेल का उपयोग कर रहे हैं, लेकिन वास्तव में इसके साथ बातचीत नहीं कर रहे हैं।


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

मेरे लिये कार्य करता है


1
कुछ स्पष्टीकरण उत्तर में सुधार करेंगे
डेव एम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.