অ ইন্টারেক্টিভ শেলটিতে স্ক্রিপ্ট চালাবেন?


17

আমার একটি ক্রোন জব রয়েছে যা স্ক্রিপ্ট চালাচ্ছে। যখন আমি স্ক্রিপ্টটি একটি ইন্টারেক্টিভ শেলের মাধ্যমে চালিত করি (শ্যাশড টু ব্যাশ) এটি দুর্দান্ত কাজ করে। স্ক্রিপ্ট ক্রোন দিয়ে নিজেই চালিত হয়ে গেলে এটি ব্যর্থ হয়।

আমার অনুমান যে এটি ইন্টারেক্টিভ শেলটিতে সেট করা কিছু পরিবেশগত ভেরিয়েবল ব্যবহার করছে। আমি স্ক্রিপ্টটির সমস্যা সমাধান করব এবং এগুলি সরাব।

আমি পরিবর্তনগুলি করার পরে, আমি জানি যে আমি সাধারণত স্ক্রিপ্টটি ক্রোনটিতে সারি করতে পারি তবে এটি কমান্ড লাইন থেকে স্ক্রিপ্টটি চালাতে পারে তবে ক্রোন থেকে এটি চালানোর জন্য বলি - অর্থাত্ একটি ইন্টারেক্টিভ পরিবেশে?


সম্পর্কিত এবং এইভাবে সম্ভবত সহায়ক: "কেএসএস শেলের মধ্যে পরিষ্কার পরিবেশ কীভাবে পাবেন?" সম্পর্কিত বিশেষত @ গিলস উত্তর দেখুন unset
sr_

1
@ Sr_ এর লিঙ্কটি থেকে আমি সন্ধান করেছি envএবং আপনি চেষ্টা করতে পারেন env -i ./my-script.sh। এছাড়াও, আপনি একটি ত্রুটি বার্তা পাচ্ছেন?
কেভিন

আপনি কোন ক্রোন প্রয়োগ করছেন?
রোজিট্রিজেভিয়াচজ

@ কেভিন - আমি উত্তর দিচ্ছি যদি আপনি এটির সাথে উত্তর দেন।
cwd

উত্তর:


12

ক্রোন থেকে কমান্ড চালানো এবং কমান্ড লাইনে চলার মধ্যে প্রধান পার্থক্যগুলি হ'ল:

  • ক্রোন সম্ভবত একটি পৃথক শেল ব্যবহার করছে (সাধারণত /bin/sh);
  • ক্রোন অবশ্যই একটি ছোট পরিবেশে চলছে (যা ক্রোন বাস্তবায়নের উপর নির্ভর করে, তাই cron(8)বা crontab(5)ম্যান পৃষ্ঠাটি পরীক্ষা করুন ; সাধারণত রয়েছে HOME, সম্ভবত SHELL, সম্ভবত LOGNAME, সম্ভবত USERএবং একটি ছোট PATH);
  • ক্রোন %চরিত্রটি বিশেষভাবে আচরণ করে (এটি একটি নতুন লাইনে রূপান্তরিত হয়);
  • ক্রোন জবগুলি টার্মিনাল বা গ্রাফিকাল পরিবেশ ছাড়াই চলে।

নিম্নলিখিত অনুরোধটি শেল স্নিপেটকে চালিত করবে যেমন এটি ক্রোন থেকে আহ্বান করা হয়েছিল। আমি ধরে নিয়েছি স্নিপেটে অক্ষর 'বা নেই %

env - HOME="$HOME" USER="$USER" PATH=/usr/bin:/bin /bin/sh -c 'shell snippet' </dev/null >job.log 2>&1

আরও দেখুন ক্রন থেকে একটি SH স্ক্রিপ্ট চালাতে , যা আপনার সমস্যার সমাধান সাহায্য করতে পারে।


হাই @ গিলস - কেবল কিছু ভেবেছিলেন - কোনও স্ক্রিপ্ট sudo -u user /path/to/scriptচালানো কি কোনও ভেরিয়েবল সেট ছাড়াই এটি চালানোর উপায় হতে পারে?
cwd

@ cwd না, সাধারণত না। sudoকিছু ভেরিয়েবল সাফ করে এবং অন্যকে একটি পরিচিত মান হিসাবে সেট করে, তবে এটি কীভাবে কনফিগার করা হয়েছে তার উপর নির্ভর করে। এটি প্রায়শই লোকেল সেটিংস ধরে রাখতে কনফিগার করা হয় এবং TERMউদাহরণস্বরূপ।
গিলস 'অশুভ হওয়া বন্ধ করুন'

2

@ এসআর_-এর লিঙ্কটি থেকে ( কীভাবে কোনও কেএস শেলের মধ্যে পরিষ্কার পরিবেশ পাবেন? ), আমি vর্ষা দেখেছি এবং আপনি এটি চেষ্টা করতে চাইতে পারেন:

env -i ./my-script.sh

এটি আমার পক্ষে ভাল কাজ করেছে যদিও @ গিলসের উত্তরটিও সত্যই ভাল।
cwd

@ cwd: আমার জন্য কাজ করে না: echo -e '#!/bin/bash -i\necho interactive $-' > ~/test.sh && chmod +x ~/test.sh && env -i ~/test.shআউটপুট interactive himB
অ্যালিক্স অ্যাক্সেল

1

আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি আপনার স্ক্রিপ্টগুলির জন্য ক্রোনটিতে রাখার সময় এবং অন্য কোথাও ব্যবহার করার সময় এবং এতে ব্যবহৃত যে কোনও এবং সমস্ত লিনাক্স কমান্ডের জন্য নিখুঁত পাথগুলি ব্যবহার করুন, সেগুলি আরও ভালভাবে চলক হিসাবে ঘোষণা করুন এবং এটি ব্যবহার করুন!


হ্যাঁ. কিন্তু অবশ্যই.
cwd

0

ক্রোন অগত্যা আপনি ব্যবহার করছেন একই শেলটি ব্যবহার করে না। চেক করুন:

cat /etc/crontab |grep SHELL

সেখানে আপনার স্ক্রিপ্টের শেলটি নির্ধারণ এবং কার্যকর করার চেষ্টা করার জন্য - এটি কি কাজ করে? ক্রোনটিতে স্ক্রিপ্ট যুক্ত করার জন্য বহু লোকের পক্ষে এটি সমস্যার একটি সাধারণ কারণ।

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


0

আপনি যদি কিছু স্ক্রিপ্টের দ্বারা প্রদত্ত কিছু ইন্টারেক্টিভ প্রশ্নগুলি উপেক্ষা করতে চান তবে আপনি চেষ্টা করতে পারেন:

yes | your_command

অথবা yes "n"আপনি যদি কোনও প্রশ্নই করতে চান না।

COMMAND:

হ্যাঁ - পুনরাবৃত্তিজনকভাবে ইতিবাচক হন হ্যাঁ আউটপুটগুলি এক্সপ্লেটিভ, বা, ডিফল্টরূপে, 'y', চিরকাল।


0

আপনার স্ক্রিপ্টটি একটি অ-ইন্টারেক্টিভ শেলটিতে চালাতে (এর বিশদ সম্পর্কিত নয় cron), আপনি এটির মাধ্যমে এটি করতে পারেন ssh

যদি আপনি সত্যিই একটি অ-ইন্টারেক্টিভ শেলটি দিয়ে শেষ করেন তবে পরীক্ষা করুন:

> ssh someuser@somehost tty
not a tty

অ-ইন্টারেক্টিভ শেলটিতে স্ক্রিপ্টটি সম্পাদন করুন:

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