ক্রোনের মধ্যে থেকে কোনও ফাইলে আউটপুট কীভাবে পুনর্নির্দেশ করা যায়?


105

আমার একটি ব্যাকআপ স্ক্রিপ্ট রয়েছে যা আমাকে দিনের একটি নির্দিষ্ট সময়ে চালানো দরকার তাই আমি cronএই টাস্কটি ব্যবহার করছি এবং ক্রোন এর মধ্যে থেকে ব্যাকআপ স্ক্রিপ্টের আউটপুটটিকে একটি এ পুনঃনির্দেশ করার চেষ্টা করছি logfile

crontab -e

*/1 * * * * /home/ranveer/backup.sh &>> /home/ranveer/backup.log

উপরের ক্রোন এন্ট্রিতে আমি উভয় stderr and stdoutএকটি লগ ফাইলে পুনর্নির্দেশ করছি ।

উপরের ক্রোন জব অনুসারে জরিমানা সম্পাদন করে syslog এবং এটি backup.shফাইলটিতে উল্লিখিত টাস্কটি সম্পাদন করে তবে এটি লগ ফাইলে কিছুই লিখেনি।

/var/log/syslog

Oct 19 20:26:01 ranveer CRON[15214]: (ranveer) CMD (/home/ranveer/backup.sh &>> /home/ranveer/backup.log)

আমি যখন ক্লিপ থেকে স্ক্রিপ্টটি চালিত করি এটি প্রয়োজনীয় হিসাবে কাজ করে এবং আউটপুট একটি লগ ফাইলে লেখা হয়

ranveer@ranveer:~$ ./backup.sh &>> backup.log 
ranveer@ranveer:~$ cat backup.log
Fri Oct 19 20:28:01 IST 2012
successfully copied testdir
test.txt successfully copied
-------------------------------------------------------------------------------------
ranveer@ranveer:~$ 

সুতরাং, কেন ফাইলের আউটপুট ক্রোন থেকে ফাইলটিতে পুনর্নির্দেশ করা হচ্ছে না।


উত্তর:


158

আমি সমস্যার সমাধান করেছি। দুটি উপায় আছে:

এম 1

থেকে ফেরৎ পরিবর্তন &>>করতে 2>&1। সুতরাং এখন crontab -eমত দেখাচ্ছে

*/1 * * * * /home/ranveer/vimbackup.sh >> /home/ranveer/vimbackup.log 2>&1

আমি বিশ্বাস করি কারণ ডিফল্টরূপে উপরে কাজ cronব্যবহার করছে shটাস্ক পরিবর্তে চালানোর জন্য bash, যাতে &>>দ্বারা সমর্থিত নয় sh

M2

যোগ করে ডিফল্ট শেল পরিবর্তন SHELL=/bin/bashমধ্যে crontab -eফাইল।


14
cronshএটির মতো : এটি একটি প্রোগ্রাম বাছাই করে না। অনেক বাস্তবায়ন আছে। সর্বাধিক প্রচলিত বাস্তবায়ন ভিক্সি ক্রোন। আমি একজনের (বর্তমান, মূল নয়) লেখক। আমি বিশ্বাস করি যে বেশিরভাগ ক্রোন ডেমনগুলি সিস্টেমটির ব্যবহার করবে shতবে এটি গ্রহণ করে কিনা তার মধ্যে এটি ভিন্ন হতে পারে &>>। কিছু ক্রোন ডেমন (আমার মতো) কোন শেল ক্রন্টবরে রেখার সাথে ক্রোন লাইনগুলি কার্যকর করে তা পরিবর্তন করতে আপনাকে সক্ষম করে না SHELL=...। আমি খুশি যে আপনি এমন একটি সমাধান পেয়েছেন যা আপনার পক্ষে কার্যকর; কেবল ভেবেছি এটি দেখানো মূল্যবান সেখানে অনেকগুলি ভেরিয়েবল রয়েছে যা এটি অন্যদের জন্য কাজ করে কিনা তা প্রভাবিত করতে পারে।
dubiousjim

YYYY-MM-DD_hh-mm-secআউটপুট ফাইলের নাম কীভাবে sertোকানো যায়, যাতে প্রতিটি ফাইলের নাম আলাদা হয় এবং পুনরায় লিখন ছাড়াই রাখা হয়?
দানিজেল


2
*/1 * * * * /home/ranveer/vimbackup.sh &>> /home/ranveer/vimbackup.logএকই জিনিস।
ইয়ানিক গিরোয়ার্ড

5

অস্বীকৃতি [1]।

আমি @ রনর্যাগের উত্তরে একটি পাদটীকা বা সংযোজন করতে চাই

আপনার শেল পুনর্নির্দেশ সিনট্যাক্স অনুসারে তা নিশ্চিত করুন /bin/sh। আপনি যদি শেল পুনর্নির্দেশ সিনট্যাক্স ব্যবহার করার চেষ্টা করেন যা বৈধ নয় /bin/shতবে আপনার আদেশটি ব্যর্থ হবে এবং আপনার ক্রোন জব কখনও চলবে না।

আপনার /etc/cron.d/example1কনফিগারেশন ফাইলগুলিতে যদি আপনি ব্যতীত অন্য কোনও ব্যবহারকারী নির্দিষ্ট করেন rootএবং সেই ব্যবহারকারীর লগইন শেলটি না থাকে /bin/bash... আপনার অবশ্যই /etc/cron.d/example1কমান্ডে / bin / sh বাক্য গঠন ব্যবহার করতে হবে ।


উদাহরণ স্বরূপ

আপনার ব্যবহারকারী শেল থাকে cshবা zshবা kshতার লগইন শেল জন্য সেট। আপনার /etc/cron.d/example1কনফিগার ফাইলে, কমান্ডটি অবশ্যই /bin/shসিনট্যাক্স ব্যবহার করবে । বিশেষত কোনও শেল পুনর্নির্দেশ অবশ্যই /bin/shসিনট্যাক্স হতে হবে ।

যদি আপনি নিজের মধ্যে উদাহরণস্বরূপ cshশেল রিডাইরেক্ট সিনট্যাক্স ব্যবহার করার চেষ্টা করেন /etc/cron.d/example1তবে আপনার ক্রোন জব কখনই চলবে না। লগ-ফাইলে crondঅবস্থিত এটির জন্য /var/log/cronবলা হবে যে কমান্ডটি চালিত হয়েছে তবে আপনার কমান্ডটি চালুর আগে কমান্ডটি একটি সিনট্যাক্স ত্রুটিযুক্ত হবে।

crondএকটি সিনট্যাক্স ত্রুটির জন্য প্রেরণ ত্রুটি বার্তাগুলি কোথায় ?

ত্রুটি কখনও রিপোর্ট করা হয় না /var/log/croncrondপরিবর্তে ডিফল্টভাবে ব্যবহার করে কোনও ত্রুটি বার্তা প্রেরণ করে mail। সুতরাং /var/spool/mail/${USER}ত্রুটিটি কি তা দেখতে আপনাকে অবশ্যই পরীক্ষা করা উচিত ।

[1]

দাবি পরিত্যাগী

  • এই উত্তরটি একটি sysvসিস্টেম ধরে নিয়েছে
  • systemd তথ্য পৃথক হতে পারে
  • বিশেষত এই তথ্যটি centos-6ডিসট্রোর জন্য শিখেছিল এবং বিভিন্ন sysvডিস্ট্রোজে প্রযোজ্য নাও হতে পারে
    • আমি centos-6বিশেষভাবে উল্লেখ করছি , কারণ বিভিন্ন ডিস্ট্রোসের আলাদা crondপ্রয়োগ হতে পারে যা এর থেকে পৃথক হয়centos-6

2
আপনি যদি নিজের /etc/cron.d/example1কমান্ডটি একটি পৃথক শেল ব্যবহার করতে চান তবে আপনি SHELL=নিজের /etc/cron.d/example1কনফিগারেশন ফাইলটিতে সেটটি ব্যবহার করতে পারেন ।
ট্রেভর বয়ড স্মিথ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.