সিস্টেমড: "অনশট" পরিষেবাটি যদি প্রথমবার ব্যর্থ হয় তবে কীভাবে আশ্বাস দেওয়া যায়?


18

আমি কয়েকবার সিস্টেমেড সার্ভিস ম্যানপেজ পড়েছি, তবে আমি এখনও একটি বেসিক সিস্টেমযুক্ত প্যাটার্নটি বের করতে পারি না:

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

আমি পুনরায় আরম্ভ = অন-ব্যর্থতার সাথে টাইপ = সিম্পল সেট করার চেষ্টাও করেছি, তবে এটি বেশিরভাগ ক্ষেত্রে আমার নীচের আচরণের প্রয়োজন হয় (ম্যানপেজ থেকে) যা অনেসট পরিষেবাগুলি দেয়:

ওনশোটের আচরণটি সাধারণের মতো; তবে, আশা করা যায় যে সিস্টেমড ফলো-আপ ইউনিটগুলি শুরু করার আগে প্রক্রিয়াটি প্রস্থান করতে হবে।

আপডেট:


আমি যে ব্যবহারটি ব্যবহার করেছি তা হ'ল এটি বাদ দেওয়া Restartএবং মোড়ানো my_cmd : ExecStart=/bin/sh -c 'while ! my_cmd; do sleep 1; done'কিছু যুক্তিসঙ্গত TimeoutStartSecমান সহ value
রোজিট্রিজেভিয়াচজ

আপনি কি ব্যর্থতাকে দেখেছেন = ? Restart=সেট করার মাধ্যমে একই জিনিস অর্জন করতে সক্ষম হতে পারে FailureAction=[self.unit](ইউনিটটির নাম দিয়ে [self.unit] প্রতিস্থাপন)। এটি হ্যাকির মতো, তবে এটি অন্তত স্পষ্ট এবং অনুসরণযোগ্য যথেষ্ট সহজ।
সেন্টিমানে

@ সেন্টিমানে FailureActionএকই মানগুলি গ্রহণ করে StartLimitActionএবং কেবল noneকোনও ধরণের শাটডাউন ট্রিগার ব্যতীত ।
jpkotta

উত্তর:


5

একটি সম্ভাব্য কাজ যা আমি চেষ্টা করছি

  [Unit]
    Description=Tags instance and EBS vols
    After=docker.service
    Requires=docker.service

    [Service]
    ExecStartPre=/usr/bin/docker run --rm -v /opt/tag.sh:/tag.sh -v /opt:/ack --entrypoint=/bin/sh alpine /tag.sh
    ExecStartPre=/usr/bin/sh -c '[[ -e /opt/TAG_SUCCESS ]]'
    ExecStart=/usr/bin/rm /opt/TAG_SUCCESS
    Restart=on-failure
    RestartSec=30

যেখানে স্ক্রিপ্ট কার্যকর tag.shহবে touch /ack/TAG_SUCCESSশেষে। আমি বিশ্বাস করি এটি পছন্দসই আচরণের খুব কাছাকাছি হয়ে গেছে কারণ ExecStartPreক্রমান্বয়ে কার্যকর হবে, কল করার আগে সফল সমাপ্তির জন্য অপেক্ষা করতে হবে ExecStartএবং ইউনিটটি কেবল Startingএকবার বিবেচিত হবেExecStart করা হবে কোন পয়েন্টের দ্বারা আমরা নিশ্চিত যে আমরা প্রারম্ভিক কার্যটি শেষ করেছি।

কিন্তু এটি এখনও একটি দৈত্য হ্যাক মত অনুভূত?


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