সিস্টেমেড সার্ভিস টাইমআউট মান কিভাবে পরিবর্তন করবেন?


33

যে সংস্থায় আমি এখন কাজ করছি সেখানে একটি লিগ্যাসি পরিষেবা রয়েছে এবং এর আরআই স্ক্রিপ্টটি পুরানো সিসভিআইনিট ব্যবহার করছে, তবে এটি সিস্টেমডের (সেন্টোস 7) ওভার চলছে।

কারণ প্রচুর গণনা, এই পরিষেবাটি শেষ হতে প্রায় 70 সেকেন্ড সময় নেয়। আমি সিস্টেমেডের জন্য কোনও টাইমআউট কনফিগার করিনি, এবং ডিফল্ট কনফিগারেশনগুলিতে পরিবর্তন করিনি /etc/systemd/system.conf, তবে এখনও যখন আমি service SERVICE stopআমার পরিষেবাটি সম্পাদন করি তখন 60০ সেকেন্ড পরে সময় শেষ হয়ে যায়।

পরীক্ষা করে journalctl -b -u SERVICE.serviceআমি এই লগ খুঁজে:

Sep 02 11:27:46 service.hostname systemd[1]: Stopping LSB: Start/Stop
Sep 02 11:28:46 service.hostname SERVICE[24151]: Stopping service: Error code: 255
Sep 02 11:28:46 service.hostname SERVICE[24151]: [FAILED]

আমি ইতিমধ্যে পরিবর্তন চেষ্টা DefaultTimeoutStopSecএ সম্পত্তি /etc/systemd/system.confথেকে 90s, কিন্তু সময় শেষ এখনও ঘটবে।

60 এর সময়সীমা কেন শেষ হচ্ছে তা কারও কি ধারণা আছে? এই সময়সীমার মানটি কনফিগার করা হয়েছে এমন অন্য কোথাও আছে কি? আমি কি এটি পরীক্ষা করার উপায় আছে?

এই পরিষেবাটি জাভা 7 দিয়ে চলে এবং এটি ডেমনাইজ করতে এটি জেএসভিসি ব্যবহার করে । আমি -waitমানটি দিয়ে প্যারামিটারটি কনফিগার করেছি 120

উত্তর:


54

আমার সিস্টেমেড সার্ভিসটি সময়োপযোগী থেকে যায় কারণ এটি আরম্ভ করতে কত সময় নিতে পারে, সুতরাং এটি আমার জন্য এটি স্থির করে:

  1. আপনার সিস্টেমড ফাইলটি সম্পাদনা করুন:
    • এর আধুনিক সংস্করণগুলির জন্যsystemd : চালান systemctl edit --full node.service( আপনার পরিষেবার নামের সাথে "নোড" প্রতিস্থাপন করুন )।
      • এটি এমন একটি সিস্টেম ফাইল তৈরি /etc/systemd/system/node.service.d/করবে যা এতে সিস্টেম ফাইলকে ওভাররাইড করবে /usr/lib/systemd/system/node.service। এটি আপনার সিস্টেম ফাইলগুলি কনফিগার করার সঠিক উপায়। কীভাবে ব্যবহার করবেন systemctl editসে সম্পর্কে আরও তথ্য এখানে
    • সরাসরি ফাইল ফাইল সম্পাদনা : আমার জন্য সিস্টেম ফাইলটি এখানে /usr/lib/systemd/system/node.service। আপনার আবেদনের নামের সাথে "নোড" প্রতিস্থাপন করুন। তবে এতে সরাসরি ফাইল সম্পাদনা করা নিরাপদ নয় /usr/lib/systemd/(মন্তব্য দেখুন)
  2. ব্যবহারের TimeoutStartSec, TimeoutStopSecবা TimeoutSec(আরও তথ্য এখানে ) নির্দিষ্ট করতে কতদিন সময় সমাপ্ত শুরু & প্রক্রিয়া বাঁধন জন্য হওয়া উচিত। এরপরে, আমার সিস্টেমেড ফাইলটি এটি দেখতে পেল:

    [Unit]
    Description=MyProject
    Documentation=man:node(1)
    After=rc-local.service
    
    [Service]
    WorkingDirectory=/home/myproject/GUIServer/Server/
    Environment="NODE_PATH=/usr/lib/node_modules"
    ExecStart=-/usr/bin/node Index.js
    Type=simple
    Restart=always
    KillMode=process
    TimeoutSec=900
    
    [Install]
    WantedBy=multi-user.target
    
    • আপনি এগুলির যেকোনটি চালিয়ে বর্তমান সময়সীমা স্থিতিটিও দেখতে পারেন (তবে আপনাকে পরিবর্তনগুলি করার জন্য আপনার পরিষেবাটি সম্পাদনা করতে হবে! পদক্ষেপ 1 দেখুন):
      • systemctl show node.service -p TimeoutStartSec
      • systemctl show node.service -p TimeoutStopSec
      • systemctl show node.service -p TimeoutSec
  3. এর পরে আপনার সাথে সিস্টেমড পুনরায় লোড করতে হবে systemctl reload node.service
  4. এখন দিয়ে আপনার পরিষেবাটি শুরু করার চেষ্টা করুন systemctl start node.service
  5. যদি এটি কাজ না করে তবে systemctl এর সাথে পুনরায় বুট করার চেষ্টা করুনsystemctl reboot
  6. যদি এটি কাজ করে নি , ব্যবহার করার চেষ্টা করুন --no-block, যাতে মত systemctl জন্য বিকল্প: systemctl --no-block start node.service। এই বিকল্পটি এখানে বর্ণিত হয়েছে : "অনুরোধকৃত ক্রিয়াকলাপটি সমাপ্ত করার জন্য একযোগে অপেক্ষা করবেন না this যদি এটি নির্দিষ্ট না করা হয় তবে ইউনিটটির শুরু শেষ না হওয়া পর্যন্ত কাজটি যাচাই করা হবে, এনকুইয়েড হবে এবং সিস্টেমট্যাক্ট অপেক্ষা করবে this কেবলমাত্র যাচাই করা হয়েছে এবং সারিবদ্ধ হয়েছে ""
    • এর systemctl maskপরিবর্তে ব্যবহারের বিকল্পও রয়েছে systemctl start। আরও তথ্যের জন্য এখানে দেখুন

মন্তব্যগুলি থেকে আপডেট:

  • TimeoutSec=infinity: এখানে "অনন্ত" ব্যবহার করার পরিবর্তে TimeoutSec=900(15 মিনিট) এর মতো প্রচুর পরিমাণে সময় দিন । যদি অ্যাপ্লিকেশনটি "চিরতরে" প্রস্থান করতে লাগে, তবে সম্ভবত এটি অনির্দিষ্টকালের জন্য একটি রিবুট ব্লক করবে। ক্রেডিট @ অ্যালেক্সিস উইলক এবং @ জিসিসিসি
  • সম্পাদনার পরিবর্তে পরিবর্তে /usr/lib/systemd/systemচেষ্টা systemctl editকরুন বা /etc/systemd/systemপরিবর্তে এগুলি ওভাররাইড করার জন্য সম্পাদনা করুন। আপনার কখনই পরিষেবা ফাইলগুলি সম্পাদনা করা উচিত নয় /usr/lib/। ক্রেডিট @ রাইজার এবং @ 0xC0000022L

8
TimeoutSec=infinity- এটি কি অনির্দিষ্টকালের জন্য পুনরায় বুটটি ব্লক করা সম্ভব হবে না? যদি এই প্রক্রিয়াটি প্রস্থান করতে "চিরকাল" লাগে? আমি প্রচুর পরিমাণের মতো প্রস্তাব দেব 5min, তবে সম্ভবত না infinity...
অ্যালেক্সিস উইলক

6
আপনার / usr / lib এ পরিষেবা ফাইলগুলি সম্পাদনা করা উচিত নয়, আপনার এগুলি সম্পাদনা করা উচিত বা / ইত্যাদি / সিস্টেমেড / সিস্টেমে ওভাররাইড করা উচিত
রাইজার

5
পরামর্শটির সংক্ষিপ্ত বক্তব্যটি সত্ত্বেও, আমি সেই উদ্দেশ্যে @ আরিজার ... আধুনিক সংস্করণ systemdঅফারের সাথে সম্মতি জানাতে হবে systemctl edit(এবং maskতাদের বিরুদ্ধে নিষ্ঠুর শক্তি প্রয়োগ করে নিষ্ক্রিয় করতে হবে disable) ঠিক সেই উদ্দেশ্যেই। আপনার কখনও ফাইলগুলি সম্পাদনা করা উচিত নয় /usr/lib/systemd
0xC0000022L

3
TimeoutSec=infinityএখানে কাজ হয়নি, আমি TimeOutSec=900(15 মিনিট) ব্যবহার করেছি এবং এটি আমার উত্তরোত্তর সংরক্ষণ করেছে। - systemctl daemon-reloadপরিষেবাটি আরম্ভ করার আগে আমার পরে চালানো দরকার ।
জেসিসিসি

10

চলমান systemctl show SERVICE_NAME.service -p TimeoutStopUSecআমি কমপক্ষে আমার পরিষেবাতে সিস্টেমড দ্বারা নির্ধারিত সময়সীমা দেখতে পেলাম।

আমি স্ক্রিপ্টটি নিয়মিত ইউনিট ফাইলের মধ্যে পরিবর্তন করেছি যাতে এটি সঠিকভাবে কাজ করে।

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