লিনাক্স সিস্টেমগুলিতে একটি চলমান প্রক্রিয়াটি থামিয়ে দেওয়ার এবং পরে আবার চালু করার কোনও উপায় আছে কি?


37

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

অভিপ্রেত-ফল

cp src dst

if time between 9:00-14:00 pause process
After 14:00 resume cp command.

22
আরএসএনসি আংশিক স্থানান্তর পুনরায় শুরু করতে পারে
থরবজর্ন রাভন অ্যান্ডারসন

2
আপনি কি প্রয়োজন একটি ব্যাকআপ হিসেবে কপি করা প্রকৃত তথ্য? যদি না হয়, আপনি cp -alহার্ডলিঙ্ক ফার্ম তৈরি করতে ব্যবহার করতে পারেন? অথবা এমন কোনও ফাইল সিস্টেম ব্যবহার করুন যা অনুলিপি ব্যবহার করে ব্লক-স্তরের রিফ্লিংকগুলিকে সমর্থন করে cp -a --reflink=auto? বিটিআরএফএস এবং জেডএফএস একই শারীরিক ডিভাইসের অনুলিপিগুলির জন্য সমর্থন করে।
পিটার কর্ডেস

9
src9:00 থেকে 14:00 এর মধ্যে ফাইলগুলির কোনও পরিবর্তন হয়? যদি তা হয় তবে কেবল cpপ্রক্রিয়াটি বিরতি দেওয়া এবং পুনরায় শুরু করার ফলে দূষিত ফাইলগুলি হতে পারে। কমান্ডের rsyncসাথে একযোগে চালানো ভাল be timeout
মার্ক প্লটনিক

কোথা থেকে এবং ফাইলগুলি অনুলিপি করা হচ্ছে? এটি কি ভার্চুয়াল সিস্টেম? উত্স ফাইল সিস্টেম কি? অনুলিপিটির উদ্দেশ্য কী?
ব্রায়াম

@ ব্রায়াম ইম আরএসসিএনসি ব্যবহার করছেন এবং দূরবর্তী থেকে স্থানীয় মেশিনে ফাইলগুলি অনুলিপি করছেন। আমি এখানে
সিটি

উত্তর:


7

হ্যাঁ, আপনার দরকার আছে

acquire the process id of the process-to-paus (PS), then do
$> kill -SIGSTOP <pid>

প্রক্রিয়াটি তারপরে স্থিতি "টি" (পিএস) সহ প্রদর্শিত হবে। চালিয়ে যেতে a

$> kill -CONT <pid>

শুভকামনা!


77

আপনি কোনও প্রক্রিয়াটি একটি সিগস্টপ সিগন্যাল প্রেরণ করে এবং পরে এটি একটি সিগন্যাক্ট প্রেরণ করে আবার চালু করতে পারেন।

আপনার কাজের চাপ ধরে নেওয়া একটি একক প্রক্রিয়া (পটভূমিতে চলমান সাহায্যকারীদের কাঁটাচামচ করে না), আপনি এই জাতীয় কিছু ব্যবহার করতে পারেন:

# start copy in background, store pid
cp src dst &
echo "$!" >/var/run/bigcopy.pid

তারপরে যখন ব্যস্ত সময় শুরু হয়, তখন এটি একটি সাইনস্টপ পাঠান:

# pause execution of bigcopy
kill -STOP "$(cat /var/run/bigcopy.pid)"

পরে, যখন সার্ভারটি আবার অলস হয়, তখন এটি আবার চালু করুন।

# resume execution of bigcopy
kill -CONT "$(cat /var/run/bigcopy.pid)"

আপনি যখন এটি নির্বাহ করতে চান নির্দিষ্ট সময়গুলির জন্য আপনাকে এটি নির্ধারণ করতে হবে, আপনি এই সময় নির্ধারণের জন্য ক্রোন বা সিস্টেমড টাইমার (বা অন্যান্য অনুরূপ সরঞ্জামগুলির বিভিন্ন) ব্যবহার করতে পারেন। কোনও সময়ের ব্যবধানের ভিত্তিতে সময় নির্ধারণের পরিবর্তে, অনুলিপিটি কখন থামিয়ে দেওয়া / পুনরায় চালু করতে হবে সে বিষয়ে সিদ্ধান্ত নিতে আপনি সার্ভারটি পর্যবেক্ষণ করতে পারেন (সম্ভবত লোড গড়, সিপিইউ ব্যবহার বা সার্ভার লগগুলি থেকে ক্রিয়াকলাপের দিকে তাকানো)।

আপনাকে পিআইডি ফাইল পরিচালনা করতে হবে (যদি আপনি এটি ব্যবহার করেন) তবে নিশ্চিত করুন যে আপনার অনুলিপিটি থামানোর আগে এখনও চলছে কিনা, সম্ভবত আপনি অনুলিপিটি শেষ করার পরে পিডফিলটি সরিয়ে পরিষ্কার করতে চান ইত্যাদি ইত্যাদি etc.

অন্য কথায়, একটি নির্ভরযোগ্য তৈরি করার জন্য আপনার আরও এগুলির প্রয়োজন, তবে কোনও প্রক্রিয়া কার্যকর করতে বিরতি / পুনঃসূচনা করতে এই সাইনস্টপ এবং সিগনকন্ট সিগন্যালগুলি ব্যবহার করার বেস ধারণাটি আপনার সন্ধান করছেন বলে মনে হয়।



1
সম্ভবত একটি অনুস্মারক যুক্ত করুন যে আপনার খুব সতর্ক হওয়া উচিত যে '/var/run/bigcopy.pid' এখনও একই প্রক্রিয়াটিকে বোঝায় যেভাবে আপনি মনে করেন। সিস্টেমে এলোমেলোভাবে অন্যান্য প্রক্রিয়া বন্ধ করা বাঞ্ছনীয় নয়। আমি জানি না যে পিডটি আপনার মনে করে যে প্রোগ্রামটি করছে তা নিশ্চিত করার কোনও নিরাপদ উপায় নেই ...
ইভান বেন

@ ইভেনবেইন হ্যাঁ এটাই আমি বোঝাতে চাইছিলাম "নিশ্চিত করুন যে আপনার কপিটি এখনও থামানোর আগে এখনও চলছে" যদিও আপনার বক্তব্য অবশ্যই এর চেয়ে স্পষ্ট! হ্যাঁ পিআইডি চেক করা সহজাতভাবে রেস-ওয়াই তাই কখনও কখনও এটি 100% নির্ভরযোগ্যতার সাথে করা সম্ভব নয় ...
ফিলাব্রেন্ডেন

@ বিড়াল আসলেই নয়, কোনও প্রক্রিয়া সাইনস্টপকে অবরুদ্ধ করতে পারে না। প্রথম মন্তব্যটির লিঙ্কটি দেখুন: "সিগস্টপ হ'ল সিগ্কিলের মতো একটি অ-অবরুদ্ধ সিগন্যাল" (বা কেবল এটি গুগল করুন, আপনি এটি দেখতে পাচ্ছেন।)
ফিলাব্রেন্ডেন

76

প্রক্রিয়া স্থগিত করার পরিবর্তে, আপনি এটিকেও কম অগ্রাধিকার দিতে পারেন:

renice 19 "$pid"

এটিকে সর্বনিম্ন অগ্রাধিকার দেবে (সর্বাধিক কৌতূহল), যাতে প্রক্রিয়াটি সিপিইউকে এমন অন্যান্য প্রক্রিয়াগুলিতে উত্সাহ দেয় যা বেশিরভাগ সময় প্রয়োজন।

লিনাক্সে, I / O দিয়েও এটি করা যেতে পারে ionice:

ionice -c idle -p "$pid"

প্রক্রিয়াটিকে "অলস" শ্রেণিতে ফেলবে , যাতে এটি কেবলমাত্র ডিস্কের সময় পায় যখন কোনও প্রোগ্রাম কোনও নির্ধারিত অনুগ্রহকালীন সময়ের জন্য ডিস্ক I / O না জিজ্ঞাসা করে


22
এটি একটি এক্সওয়াই সমস্যার একটি সাধারণ ক্ষেত্রে । প্রশ্নটি ছিল একটি প্রক্রিয়াটি কীভাবে বিরতি দেওয়া যায় তবে এটি প্রশ্নের উত্তর দেয় না। প্রকৃতপক্ষে অগ্রাধিকার হ্রাস করা প্রকৃত সমস্যার উন্নততর দৃষ্টিভঙ্গি হলেও এটি প্রশ্নের উত্তর দেয় না। কীভাবে কোনও প্রক্রিয়া বিরতি দিতে হবে এবং কেন বিরতি দিতে সমস্যা হতে পারে তা অন্তর্ভুক্ত করার জন্য আমি প্রশ্নটি সম্পাদনা করব (উদাহরণস্বরূপ বিরাম দেওয়ার সময় ফাইলটি সম্পাদনা করা যেতে পারে)।
MechMK1

22
@ ডেভিডস্টোকঞ্জার, প্রযুক্তিগতভাবে, এই উত্তরটি ওএসকে কীভাবে প্রসেসটি থামিয়ে দিতে বলবে যখন এটি (ওএস, সিপিইউ, আই / ও শিডিউলার) ব্যস্ত থাকে (এমনকি এটি যদি একবারে কয়েক সেকেন্ডের ভগ্নাংশের জন্য থাকে)। প্রক্রিয়াটি কীভাবে ম্যানুয়ালি স্থগিত করা যায় তা ইতিমধ্যে অন্যান্য উত্তরে কভার করা হয়েছে। ফাইলগুলি অনুলিপি করা হচ্ছে এমন সময়ে এই সমাধানটি সংশোধিত হওয়ার সমস্যাটির সমাধান করে না।
স্টাফেন চেজেলাস

5
আই / ও অগ্রাধিকার পরিবর্তন সর্বদা সেরা সমাধান নয়। আপনি যদি স্পিনিং ডিস্কগুলি থেকে অনুলিপি করছেন, আপনি এখনও প্রতিটি উচ্চ-অগ্রাধিকারের অনুরোধের আগে সন্ধান করতে পারেন যা আপনি নিম্ন-অগ্রাধিকারের ক্রিয়াকলাপটিকে পুরোপুরি বিরতি দিলে আপনার নেওয়া হবে না।
চিহ্নিত করুন

2
নিম্ন অগ্রাধিকার এমনকি সমস্যার সমাধান করে না। এমনকি বাক্সটি কয়েক সেকেন্ড বা মিনিটের জন্য পুরোপুরি নিষ্ক্রিয় থাকলেও এর অর্থ এই নয় যে একটি বিশাল অনুলিপি প্রক্রিয়া যা ফাইল সিস্টেম ক্যাশে থেকে সমস্ত কিছু উচ্ছেদ করে দেবে তা আপত্তিহীন হতে চলেছে। আবার কোনও বোঝা আসার সাথে সাথে এটি খুব ধীরে ধীরে সমস্ত কিছু ফিরিয়ে আনবে
আর ..

2
@ ডেভিডস্টকঞ্জার এক্সওয়াই সমস্যা মোকাবেলার পছন্দসই উপায় হ'ল সঠিক সমাধান দেওয়া, যদিও এটি প্রশ্নটি জিজ্ঞাসা করছে না। যখন আপনি জানেন যে প্রশ্নে বর্ণিত পদ্ধতিরটি ভুল, তখন একটি ভাল উত্তর সেই ভুল পদ্ধতির দেয় না বরং পরিবর্তে আরও ভাল প্রস্তাব দেয়।
terdon

8

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


3

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

স্ক্রিনের সাথে আমি বিশ্বাস করি আপনি অধিবেশন বাধা দিতে পারেন তারপর এটি আলাদা করে লগ আউট করতে পারেন। পরে আপনি ফিরে যেতে পারেন এবং সেই সেশনে পুনরায় সংযোগ করতে পারেন। আপনাকে এটির সাথে কিছুটা খেলতে হবে তবে এটি সেশনগুলি আরও শক্তিশালী করেছে।

আপনি লগ আউট এবং বাড়িতে যেতে পারেন তবে দূরবর্তীভাবে লগইন করতে পারেন, আপনি অফিসে যে সিস্টেমে শুরু করেছেন তার সাথে যোগাযোগ করুন এবং সন্ধ্যায় এটি পুনরায় শুরু করতে পারেন, তারপরে পরের দিন আবার কর্মস্থলে নিয়ে যান।


আমি ইতিমধ্যে থের জন্য tmux ব্যবহার করছি। তবে আমি এমন একটি স্ক্রিপ্ট লিখছি যা স্ব-সচেতন বা সর্বোপরি পরিবেশ-সচেতন হবে, তাই সার্ভার উচ্চ ট্রাফ পেলে এটি বন্ধ হয়ে যায় এবং যখন এটি স্বাভাবিক থাকে তখন চালিয়ে যান।
সল্লোসা

0

যদি আপনার শেল এটি সমর্থন করে (প্রায় সবই করেন), আপনি SIGTSTPঅগ্রভাগ টাস্কে সহজেই একটি সংকেত প্রেরণ করতে ^ Z (Ctrl + Z) টিপতে পারেন , তারপরে এটি fg(অগ্রভাগে) বা bg(পটভূমিতে) দিয়ে চালিয়ে যেতে পারেন ।

আপনি যদি একাধিক কাজে এই কাজটি করে থাকেন এবং পরে তাদের কাছে ফিরে যেতে চান, আপনি jobsকমান্ডটি ব্যবহার করতে পারেন , তারপরে ফিরে আসতে পারেন fg/bg %#, যেখানে # কর্মসংস্থানে বন্ধনীতে দেওয়া সংখ্যা।

মনে রাখবেন যে (যা অন্যান্য সমস্ত উত্তরের জন্য ব্যবহৃত হয়) এর SIGTSTPচেয়ে কিছুটা আলাদা SIGSTOP, এটি সবচেয়ে গুরুত্বপূর্ণ কারণ এটি উপেক্ষা করা যেতে পারে (তবে আমি এটিকে বাদ দিয়ে কোনও প্রোগ্রাম দেখিনি sl)। স্ট্যাকওভারফ্লোতে এই উত্তরটিতে আরও বিশদ পাওয়া যাবে


অবাক করে দিয়েছি যে কোনও উত্তর এখনও এটি উল্লেখ করেনি।
এভ

ট্যু অ্যাভে, আমি এই মাল্টিটাস্কিং ট্রিকটি জানি। তবে এটি হওয়ার জন্য, একটি টার্মিনালে থাকা দরকার, যেখানে আমাকে একটি স্ক্রিপ্ট তৈরি করতে হয়েছিল যা কাজটি নিজেই করবে, যদিও এটি দিন সময় নেয় না কেন।
সোল্লোসা

@ সল্লোসা একই প্রশ্ন এবং টার্মিনালে অ্যাক্সেস সহ এটি অন্যদের পক্ষে কার্যকর হতে পারে।
Ave নগরী:

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