ম্যাকোস / র‌্যাম ডিস্ক ব্যাকআপে শাটডাউন স্ক্রিপ্ট


0

আমি ম্যাকোজে একটি শাটডাউন স্ক্রিপ্ট তৈরি করার চেষ্টা করছি (10.11) - এটি একটি স্ক্রিপ্ট যা শাটডাউনে চলে, ম্যাক বন্ধ করে না এমন স্ক্রিপ্ট নয় । লিনাক্স "আরসি" সিস্টেমটি ম্যাকোজে উপস্থিত নেই।

আমি একটি সমাধান অনুসন্ধান করেছি এবং অনুসন্ধান করেছি এবং এটিই কেবলমাত্র আমি সন্ধান করতে সক্ষম হয়েছি। এটি লঞ্চযুক্ত বুটে চালু হয় এবং প্রারম্ভকালীন এবং শাটডাউন উভয় ফাংশন যখন তাদের উচিত:

#!/bin/bash

function startup()
    {
    ## commands to create and fill ram disk

    tail -f /dev/null &
    wait $!
    }

function shutdown()
    {
    ## commands to backup contents of ramdisk

    exit 0
    }

trap shutdown SIGTERM

startup;

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

function backup_ramdisk()
    {
    ## empty ram disk backup folder
    rm -R -f /webfolder-backup/*

    ## copy contents of the ramdisk to the ramdisk backup
    cp -R /Volumes/webfolder/ /webfolder-backup/

    ## make me the owner
    chown -R me /webfolder-backup/
    chmod -R 777 /webfolder-backup/ 

    exit 0
    }

আসল স্ক্রিপ্টটি অতিরিক্ত হিসাবে লোড হয় যা স্টাফ লগ করে এবং আমি নিশ্চিত করতে পারি যে পুরো স্ক্রিপ্টটি চলছে run তবে যা ঘটে তা হ'ল cpলাইন ব্যর্থ। কখনও কখনও এটি সম্পূর্ণরূপে ব্যর্থ হয় এবং ব্যাকআপ ফোল্ডারটি খালি থাকে। তবে প্রায়শই এটি র‍্যাম ডিস্কের কাঠামোর অংশ হয়ে যায় এবং একই জায়গার চারপাশে (তবে ঠিক নয়) ফাইলগুলি অনুলিপি করা বন্ধ করে দেয়।

প্রায়শই এটি ত্রুটি ছুঁড়ে ফেলে cp: /Volumes/webfolder/: No such file or directoryযদিও এটি ইতিমধ্যে folder ফোল্ডারটি থেকে একশ আইটেম অনুলিপি করেছে। আমার স্ক্রিপ্টটির ব্যাক আপ শেষ করার আগে শটডাউন কমান্ডটি র্যাম ডিস্কটিকে আনমাউন্ট করে দিচ্ছে তা আমাকে ভাবিয়ে তোলে। মনে রাখবেন, কারণ এটি একটি র‌্যাম ডিস্ক, এটি সমস্ত ফাইল অনুলিপি করতে কেবল কয়েক সেকেন্ড সময় নেয়। তবে মনে হচ্ছে এটি যথেষ্ট নয়। আমার স্ক্রিপ্ট চলাকালীন আমি যদি শাটডাউন প্রক্রিয়াটি বিরতি দিতে পারে এমন কোনও উপায় ছিল, তবে এগিয়ে যান, এটি আদর্শ হবে! অথবা পুরোপুরি এর আরও ভাল পদ্ধতির হতে পারে?


র‌্যামডিস্ক ব্যবহারের চেয়ে স্বাভাবিক ম্যাকোস ডিস্ক ক্যাচিং কত ধীর গতির অর্থ এটি ঝামেলার উপযুক্ত?
চিহ্নিত করুন

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

মজার ব্যাপার হচ্ছে, একটি বাতিক আমি লাইনে পরিবর্তন tail -f /dev/null &করতে tail -f /Volumes/webfolder/.handleএবং অবশ্যই, অদৃশ্য আমার র্যাম ডিস্কে .handle নামক ফাইল তৈরি করা হয়েছে। র্যাম ডিস্কে একটি ফাইল খোলার লেজ হ'ল ধারণাটি এটিকে উন্মুক্ত রাখবে এবং স্ক্রিপ্টটি বের না হওয়া অবধি র‌্যাম ডিস্কটি বের করে দেবে না। এটি কাজ করে না ... তবে এটি সাহায্য করে। আমি ধারাবাহিকভাবে আরও ফাইলগুলি cpলাইনটির সাথে অনুলিপি করছি । কিন্তু তারা সবাই না। সুতরাং আমি সঠিক দিকে যেতে পারি, আমাকে কেবল আরও কয়েক সেকেন্ডের জন্য র‌্যাম ডিস্কটি উন্মুক্ত রাখতে বাধ্য করা দরকার।
l008com

উত্তর:


1

লিনাক্সের সাথে আপনার তুলনা সম্পর্কে: ম্যাক ওএস এক্সের আসলেই "আরসি" সিস্টেম ছিল, আপনি লিনাক্স থেকে জানেন (এটি সত্যই একটি এসআইএসআইভি সিস্টেম নামে পরিচিত)। ২০০৫ সালে ওএস এক্স লায়ন দিয়ে এই সিস্টেমটি পরিত্যাগ করা হয়েছিল এবং পরিবর্তে আরও আধুনিক লঞ্চ করা চালু করা হয়েছিল - যা অন্যান্য জিনিসের মধ্যে অনেক দ্রুত বুটের দিকে পরিচালিত করে।

লিনাক্সে একই পরিবর্তন ঘটেছে, তবে পরে ম্যাকোএসের চেয়ে। আজকাল লিনাক্স ডিস্ট্রিবিউশনগুলি সাধারণত একটি init সিস্টেম ব্যবহার করে systemd, upstart বা অনুরূপ "আধুনিক" ব্যবহার করে।

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

মূলত শাটডাউনে যা ঘটে থাকে (এটি সম্পূর্ণ লিনাক্সের সাথে সমান) তা হ'ল প্রতিটি প্রক্রিয়াটি SIGTERM প্রেরণ করা হয় যাতে এটি জানানো হয় যে এটি শেষ হওয়া উচিত। প্রক্রিয়াটির কেবলমাত্র বন্ধ করার খুব অল্প সময় আছে (অর্থাত কয়েক সেকেন্ডের মধ্যে) - অন্যথায় সিস্টেম যদি সাড়া না দেয় তবে প্রক্রিয়াটি বন্ধ করে দেওয়ার জন্য সিগ্কিল সিগন্যাল প্রেরণ করে।

আপনার ক্ষেত্রে যখন অনুলিপিটি কিছুটা বেশি সময় নেয়, আপনি উভয় সংকেত আটকে ফেলবেন এবং আপনার শাটডাউন () ফাংশনটি দু'বার চালাবেন।

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

যতদূর আমি মনে করি /etc/rc.shutdown.local ফাইলটি এখনও শাটডাউনে প্রোগ্রাম চালানোর জন্য একটি বৈধ পদ্ধতি। এটি এটি করার সবচেয়ে সহজ উপায়।

কেবলমাত্র /etc/rc.shutdown.local ফাইল তৈরি করুন এবং এটিকে সম্পাদনযোগ্য করে তুলুন। এটি আপনার বর্তমান স্ক্রিপ্টের মতো শেবাং দিয়ে শুরু করা উচিত তবে কেবলমাত্র আপনার ব্যাকআপে ফাইলগুলি অনুলিপি করতে ব্যবহার করা আদেশগুলি থাকা দরকার।

আপনি যদি লঞ্চের সাথে এটি সঠিকভাবে করতে চান আপনি সিগন্যালগুলি সঠিকভাবে পরিচালনা করতে আপনার হ্যাকটি সংশোধন করতে পারেন এবং তারপরে xpc_transaction_begin / end ফাংশনগুলি ব্যবহার করে সিস্টেমকে জানাতে পারেন যে আপনার প্রোগ্রামটি কার্যকর কাজ করছে, এবং শাটডাউন শেষ না হওয়া পর্যন্ত বিলম্ব করা উচিত - বা বিকল্পভাবে ইভেন্টের ট্রিগার কার্যকারিতা লঞ্চে ব্যবহার করুন।

আমি আপনাকে প্রথমে /etc/rc.shutdown.local চেষ্টা করার পরামর্শ দিচ্ছি। এটি অবহেলা করা হয়েছে তবে যতদূর মনে পড়ে এখনও কাজ করছি working

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

আপনার অনুরোধ সম্পর্কে আরও ভাল পদ্ধতির উপস্থিতি আছে কিনা - তারপরে উত্তরটি "সম্ভবত, হ্যাঁ"। র‌্যাম ডিস্কগুলিতে একটি ওয়েব ফোল্ডারটি অনুলিপি করার ধারণাটি কিছুটা historicতিহাসিক এবং তারিখ বলে মনে হচ্ছে। সেই ওয়েব ফোল্ডারটি দিয়ে আপনি কী করছেন সে সম্পর্কে আমাদের কাছে তথ্য নেই তবে আপনি যদি কেবল ওয়েব সাইটগুলি পরিবেশন করেন এবং র‌্যাম-ডিস্ক ব্যবহার করে এটি দ্রুত হতে চান - এটিই ভুল পদ্ধতির। ম্যাকওএসের বিল্ট-ইন ভিএফএস ক্যাশিং কার্যকারিতা (লিনাক্সের মতো অন্য কোনও আধুনিক অপারেটিং সিস্টেমের মতো) ব্যবহার করা আরও ভাল।


ম্যাক ওএস এক্স লায়ন বেরিয়েছে ২০১২ সালে, টাইগার ছিল 10.4, যা 2005 সালে প্রকাশিত হয়েছিল And এবং হ্যাঁ, তখন আরসি.শুটডাউন ছিল l স্থানীয়। তবে এখন তা চলে গেছে। কোন সিস্টেমটি এটি থেকে মুক্তি পেয়েছিল তা আমি আপনাকে বলতে পারি না, তবে এটি অবশ্যই 10.11-এর কাছাকাছি নয়। সাইনটারম এবং সিগ্কিল পর্যন্ত, আমি আমার স্ক্রিপ্ট থেকে সিগিলকে সরিয়েছি, তবে এটি ফলাফল পরিবর্তন করে নি। তবুও ফাইলগুলি ভলিউম / ওয়েবফোল্ডারের জন্য ত্রুটিগুলি খুঁজে পায় না / যাইহোক এটিকে প্রতিফলিত করতে আমি আমার মূল পোস্টে স্ক্রিপ্টটি আপডেট করেছি।
l008com

লঞ্চ করা কনফিগারেশন সম্পর্কিত, নির্ভরতা এবং অর্ডার কনফিগার করে আপনি কী বোঝাতে চেয়েছেন তা নিশ্চিত। আমি কখনই এরকম কিছু শুনিনি, যখন এটি চালু হবে। আমার আরম্ভ করা.প্লেলিস্টটিতে কেবলমাত্র নিম্নলিখিত বৈশিষ্ট্যগুলি সেট করা আছে: লেবেল, অক্ষম (মিথ্যা), প্রোগ্রাম এবং রানআউটএলড। এছাড়াও আপনি যখন এটির বিষয়ে চিন্তা করেন, স্ক্রিপ্টটি প্রস্থান করার পরে সমস্যাটি ঘটে চলেছে তাই এখানে কীভাবে প্রবর্তন নির্ভরতা প্রযোজ্য হবে। আপনি একটি বিকল্পটি উল্লেখ করেছিলেন যে চালু হয়েছিল "ইভেন্ট ট্রিগার কার্যকারিতা" ব্যবহার করা। আপনি কি এ সম্পর্কে বিস্তারিত বলতে পারেন?
l008com

শেষ অবধি, আমি xpc_transaction_begin googled তবে এটি একটি অ্যাপল প্রোগ্রামিং এপিআইয়ের মতো দেখাচ্ছে, শেল স্ক্রিপ্ট থেকে কল করতে পারি এমন কিছু নয়? যতক্ষণ না র‌্যাম ডিস্কের সতর্কবার্তা রয়েছে, আমি সেগুলি সম্পর্কে অবহিত এবং ফাইলগুলি সুরক্ষিত রাখার জন্য একাধিক অন্যান্য সিস্টেম রয়েছে। তবে হ্যাঁ, যদি কেউ এটি পড়েন এবং অনুরূপ কিছু করার কথা ভাবছেন, র‌্যাম ডিস্কটি স্টার্টআপে তৈরি করার জন্য একটি সাধারণ স্ক্রিপ্ট তবে এটি শাটডাউনে ব্যাক আপ করা যথেষ্ট নয়!
l008com

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

হ্যাঁ, তবে "কয়েক সেকেন্ড" খুব সিস্টেম নির্ভর। অর্থাৎ এটি নির্ভর করে আগে আপনি কী ধরণের সময় দিচ্ছেন তা পরীক্ষা করুন।
jksoegaard
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.