শেল স্ক্রিপ্ট সমস্যা: মাইএসকিউএল সার্ভারটি দুর্ঘটনাক্রমে বন্ধ হয়ে গেলে পুনরায় চালু করার জন্য ক্রোন জব স্ক্রিপ্ট


11

আমার কাছে এই স্ক্রিপ্ট রয়েছে, আমি এই স্ক্রিপ্টটি কার্যকর করতে সিআরএন কাজ সেটআপ করতে ব্যবহার করছি, তাই এটি মাইএসকিউএল পরিষেবা চালু কিনা তা পরীক্ষা করতে পারে; তা না হলে এটি মাইএসকিউএল পরিষেবাটি পুনরায় চালু করে:

#!/bin/bash
service mysql status| grep 'mysql start/running' > /dev/null 2>&1
if [ $? != 0 ]
then
    sudo service mysql restart
fi

আমি হিসাবে হিসাবে সেট ক্রোন কাজ আছে।

sudo crontab -e

এবং তারপর যোগ,

*/1 * * * * /home/ubuntu/mysql-check.sh

সমস্যাটি হ'ল এটি প্রতিটি ক্রোন জব এক্সিকিউশনে মাইএসকিউএল পুনঃসূচনা করে .. এমনকি সার্ভার এটি চালিত হলেও মাইএসকিউএল পরিষেবাটি পুনরায় আরম্ভ করে যা স্ক্রিপ্টে এটি সংশোধন করে তা করার জন্য।


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

1
এছাড়াও, বাশ ব্যবহার করা [ ... ]বা এড়িয়ে চলুন test <TEST>। এগুলি সিনট্যাক্স অবহেলা করা হয়েছে[[ ... ]]পরিবর্তে ব্যবহার করুন। শুধুমাত্র ব্যবহার [ ... ]এবং / অথবা test <TEST>যখন [[ ... ]]হয় না পাওয়া যায়।
আলেকজ মাগুরা

1
এটি প্রথম শেল স্ক্রিপ্ট যা আমি কয়েকটি উপলব্ধ স্ক্রিপ্ট ব্যবহার করে চেষ্টা করেছি, আমি এটি কেবল সংশোধন করেছি। সিনট্যাক্স সম্পর্কে বেশি কিছু জানেন না। সমস্যা এখনও আছে প্রতিটি সিআরএন জব এক্সিকিউশন অ্যালেক্সেজমাগুরা
স্ট্র হ্যাট

1
এর মতো কিছু চেষ্টা করুন: এটি if ! (service mysql status | grep 'mysql start/running' &>/dev/null); then sudo service mysql restart; fi কী করে, এটি কি একটি সাবশেল শুরু হয়, যার মধ্যে service mysql status | grep 'mysql start/running' &> /dev/nullরান হয়, বলা সাবশেলের রিটার্ন (প্রস্থান) স্থিতিটি যদি পরে-বিবৃতিতে চলে যায়, যা এটি শূন্য নয় কিনা তা পরীক্ষা করে, আর যদি তা না হয় না নন-জিরো তারপর এটি রান thenব্লক।
আলেকজ মাগুরা

মাইএসকিএল পিডি ফাইলের জন্য এটির প্রক্রিয়া পিড লিখবে না? যদি এটি হয় তবে আপনি এটি আপনার মাইএসকিএল স্থিতি পরীক্ষা করার অন্য উপায় হিসাবে ব্যবহার করতে পারেন
ফ্লিন্ট

উত্তর:


18

আমি সন্দেহ করি যে আপনি আপনার ক্রন্টব ফাইলটিতে এই স্ক্রিপ্টটি কার্যকর করতে ক্রোন জব সেটআপ করেছেন, এবং রুট ক্রন্টব ফাইলটিতে নয়। এটি সঠিক নয় কারণ আপনি যদি রুট হিসাবে চালনা না করেনservice mysql status তবে mysqlপরিষেবাটি স্বীকৃত হবে না।

সুতরাং, স্ক্রিপ্টটি অনুসরণ করুন:

#!/bin/bash
if [[ ! "$(/usr/sbin/service mysql status)" =~ "start/running" ]]
then
    /usr/sbin/service mysql start
fi

নিশ্চিত হয়ে নিন যে এটি কার্যকর করা যায়:

chmod +x /path/to/script

তারপরে রুট ক্রন্টবটিতে নিম্নলিখিত হিসাবে একটি নতুন এন্ট্রি যুক্ত করুন:

  • রুট ক্রন্টব ফাইলটি ব্যবহার করে সম্পাদনা করুন:

    sudo crontab -e
  • এবং ফাইলটিতে নিম্নলিখিত লাইনটি যুক্ত করুন:

    */1 * * * * /path/to/script
  • দ্রষ্টব্য: আমি প্রতি মিনিটের জন্য ক্রোন জব সেট করেছি, তবে আপনি নিজের ইচ্ছামত পরিবর্তন করতে পারেন বা আপনি যেমন ভাল মনে করেন তেমন পরিবর্তন করতে পারেন। এই অর্থে http://en.wikedia.org/wiki/Cron দেখুন ।


আমি এটি ক্রন্টব হিসাবে সেটআপ করেছি, আমার ধারণা সমস্যাটি স্ক্রিপ্টের সাথে রয়েছে, আমি স্ক্রিপ্টের উপরে চেষ্টা করব
স্ট্র হ্যাট

./mysql-check.sh: line 2: [: =~: binary operator expectedউপরের স্ক্রিপ্টে ত্রুটি
স্ট্র হ্যাট

আমি বিশ্বাস করি যে আপনি !যদি ক্র্যাশে মাইএসকিএল পরিষেবাটি পুনরায় চালু করতে চান তবে আপনি এই রেজেক্স ম্যাচটিকে প্রত্যাখ্যান করতে চান
ফ্লিন্ট

@ ফ্লিন্ট এটিও সত্য ... দুঃখিত, আমি এখনও আমার সকাল কফি খাচ্ছি। :)
রাদু রেডানু

@ ডি_বৈভব ツ এখন সবকিছু ঠিকঠাক করা উচিত। সুতরাং, রুট হিসাবে এখনই চেষ্টা করুন।
রাদু রেদানু

3

রাদুর উত্তর প্রায় কাজ করে। এটি কাজ করার জন্য আমাকে পথ নির্ধারণ করতে হয়েছিল:

#!/bin/bash
PATH=/usr/sbin:/usr/bin:/sbin:/bin
if [[ ! "$(service mysql status)" =~ "start/running" ]]
then
    service mysql start
fi

1
আসলে আমি PATHক্রন্টব ফাইলটিতে সেট করেছি । যাইহোক, আপনার ক্ষেত্রে আপনাকে আমার উত্তর সম্পাদনা করার PATH=/usr/sbin:$PATHজন্য পুরো পথটি ব্যবহার বা ব্যবহার করতে হবে service
রাদু রেডানু

2

রাদুর উত্তর কাজ করে - তবে এই স্ক্রিপ্টটিও কাজ করে

#!/bin/bash
if [[ $(pgrep mysql | wc -l) = 0 ]];
then
    sudo service mysql start;
fi

আমি পরীক্ষা pgrep mysqlকরেছিলাম 0এবং মাইএসকিএল বন্ধ হয়ে যাওয়ার 2জন্য এবং দৌড়ানোর জন্য পেয়েছিলাম । এর জন্য আমি শর্তটি সেট করেছিলাম if [[ $(pgrep mysql | wc -l) = 0 ]];এবং এটি আমার পক্ষে কাজ করে।
অ্যালিন সি

আপনার উপায় সম্ভবত ভাল ... আমি পরিবর্তন করব।
JxAxMxIxN

এই স্ক্রিপ্টটি কাজ করে /bin/bash(এটি ব্যাশ ছাড়া কাজ করে না)। */1 * * * * /bin/bash /root/mysql-check.sh
মাহফুজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.