দ্রষ্টব্য: আমি মিডিয়ামের উপরে একটি নিবন্ধ লিখেছিলাম যাতে কীভাবে একটি পরিষেবা তৈরি করা যায় এবং এই বিশেষ সমস্যাটি কীভাবে এড়ানো যায় সে সম্পর্কে ব্যাখ্যা করা হয়েছে: সিস্টেমেড সহ একটি লিনাক্স পরিষেবা তৈরি করা ।
মূল প্রশ্ন:
আমি কর্মী স্ক্রিপ্ট সর্বদা কাজ করে রাখতে সিস্টেমড ব্যবহার করছি:
[Unit]
Description=My worker
After=mysqld.service
[Service]
Type=simple
Restart=always
ExecStart=/path/to/script
[Install]
WantedBy=multi-user.target
যদিও স্ক্রিন্টটি কয়েক মিনিটের পরে স্বাভাবিকভাবে প্রস্থান হয়ে গেলে পুনরায় সূচনাটি systemd
ঠিকঠাক কাজ করে , আমি লক্ষ্য করেছি যে এটি যদি বারবার স্টার্টআপে চালাতে ব্যর্থ হয় তবে এটি শুরু করার চেষ্টাটি ছেড়ে দেবে:
Jun 14 11:10:31 localhost systemd[1]: test.service: Main process exited, code=exited, status=1/FAILURE
Jun 14 11:10:31 localhost systemd[1]: test.service: Unit entered failed state.
Jun 14 11:10:31 localhost systemd[1]: test.service: Failed with result 'exit-code'.
Jun 14 11:10:31 localhost systemd[1]: test.service: Service hold-off time over, scheduling restart.
Jun 14 11:10:31 localhost systemd[1]: test.service: Start request repeated too quickly.
Jun 14 11:10:31 localhost systemd[1]: Failed to start My worker.
Jun 14 11:10:31 localhost systemd[1]: test.service: Unit entered failed state.
Jun 14 11:10:31 localhost systemd[1]: test.service: Failed with result 'start-limit'.
একইভাবে, আমার কর্মী স্ক্রিপ্ট একজন প্রস্থান অবস্থা সঙ্গে বেশ কয়েকবার বিফল হয় 255
, systemd
এটিকে পুনর্সূচনা করার প্রচেষ্টা বাদ দেয়:
Jun 14 11:25:51 localhost systemd[1]: test.service: Failed with result 'exit-code'.
Jun 14 11:25:51 localhost systemd[1]: test.service: Service hold-off time over, scheduling restart.
Jun 14 11:25:51 localhost systemd[1]: test.service: Start request repeated too quickly.
Jun 14 11:25:51 localhost systemd[1]: Failed to start My worker.
Jun 14 11:25:51 localhost systemd[1]: test.service: Unit entered failed state.
Jun 14 11:25:51 localhost systemd[1]: test.service: Failed with result 'start-limit'.
সর্বদা কয়েক সেকেন্ড পরে আবার চেষ্টা systemd
করার জন্য কি কোনও উপায় আছে ?
StartLimitIntervalSec=0
এবং voilà।