পরিষেবা শুরু করতে ব্যর্থ


16

আমি একটি সিস্টেমযুক্ত পরিষেবা তৈরি করেছি:

[Unit]
Description=My service

[Service]
Type=forking
ExecStart=/bin/sh $HOME/theFolder/run.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target
Alias=mine.service

আমি এটিকে / etc / systemd / system ফোল্ডারে রেখেছি এবং আমার নামটি রেখেছি।

আমি যদি চালাই তবে sudo service mine startতা আমাকে দেয়:

মাইন সার্ভিস শুরু করতে ব্যর্থ

--- হালনাগাদ -----

আমি প্রথমে রান করি sudo systemctl daemon-reloadএবং এখন এটি আমাকে কোনও বার্তা দেয় না তবে পরিষেবাটি এখনও শুরু হয় না।


10
আপনি কি systemctl daemon-reloadআপনার ইউনিট ফাইল তৈরির পরে চালিয়েছেন?
উইল্যান্ড

@ ওয়াল্যান্ড: হুম..এখন এটি আমাকে কোনও বার্তা দেখায় না B তবে এটি এখনও শুরু হয় না।
জর্জ

@ ডন_ক্রিস্টি: স্থিতিটি বলছে এটি সক্রিয়, তবে স্ক্রিপ্টটি (এক্সিকিস্টার্টে) কার্যকর করা হয়নি।
জর্জ

এটি সঠিক know হোম কীভাবে জানবে? এটি সিস্টেম সার্ভিসের জন্য আপনি কী আশা করেন?
সার্জ

@ সার্জ: হুম..সেই, আমি কীভাবে $ হোম ব্যবহার করতে পারি?
জর্জি 21

উত্তর:


14

$HOMEস্ক্রিপ্টটি চালাচ্ছেন এমন ব্যবহারকারীর হোম ডিরেক্টরিকে নির্দেশ করে। সিস্টেমযুক্ত পরিষেবাগুলি রুট দিয়ে শুরু করা হয়েছে যাতে এটি সম্ভবত চেষ্টা করবে /root/theFolder/run.sh। পরিষেবা ফাইলগুলিতে পরম পাথ ব্যবহার করুন।

আপনার কাছে forkingবিকল্প সেটও রয়েছে। প্রোগ্রামটির জন্য এটি প্রয়োজন যা তাদের পটভূমি, আপনার স্ক্রিপ্টটি কি এটি করে? বেশিরভাগ তা করেন না এবং যদি আপনার না করে তবে আপনি এই বিকল্পটি সরিয়ে ফেলুন বা সিস্টেমড আপনার স্ক্রিপ্টটির শুরু হিসাবে এটি দাবি শেষ করতে অপেক্ষা করবে।

আপনার হোম ডিরেক্টরিতে স্ক্রিপ্টগুলিতে নির্দেশ করে এমন সিস্টেম পরিষেবা ফাইলগুলি নিরুৎসাহিত করা এবং সম্ভবত একটি সুরক্ষা উদ্বেগ। যেহেতু এগুলি রুট হিসাবে চালিত হয় এগুলি যে কেউ এগুলি সংশোধন করতে পারে আপনার কম্পিউটারে সম্ভাব্যভাবে রুট অ্যাক্সেস অর্জন করতে পারে। স্ক্রিপ্টটি অনুলিপি করা /usr/local/binএবং এটি বন্ধ করার জন্য মূল দ্বারা এটি কেবল লেখার যোগ্য এবং এটি নিশ্চিত করা আরও ভাল। সার্ভিস ফাইলে User=এবং Group=অপশনগুলি ব্যবহার করে একটি অনিবদ্ধ ব্যবহারকারী হিসাবে স্ক্রিপ্টটি চালানো ভাল ধারণা ।

আপনি যদি এটি আপনার ব্যবহারকারী হিসাবে চালাতে চান তবে পরিষেবা ফাইলটি প্রবেশ করানো এবং ~/.config/systemd/user/এটি দিয়ে / সক্ষম করা systemctl --user enable yourservice && systemctl --user start yourservice(নোট, আপনার ব্যবহারকারীর রুট নয় হিসাবে চালানো) আরও ভাল। দেখুন এই ব্যবহারকারী সেবা ফাইল আরো তথ্যের জন্য।


: আমি স্ক্রিপ্টটি / ইউএসআর / স্থানীয় / বিন এবং পরিষেবাটিকে /.config/systemd/user- এ রেখেছি। আমি যদি পরিষেবাটি সক্ষম করার চেষ্টা করি তবে এটি আমাকে "অতিরিক্ত যুক্তি" দেখায় I .. ইউনিট .. ', এরকম কিছু।
জর্জি

আপনি যে চেষ্টা করেছেন তার পূর্ণ আদেশ এবং আরও বিস্তারিত লগ সরবরাহ করতে পারেন। টুকরোগুলি দিয়ে এটি ডিবাগ করা শক্ত।
মাইকেল ড্যাফিন

: সেখানে $ হোম পথ ব্যবহার করতে একটি সমাধান কারণ, আমি যদি, / usr / স্থানীয় / বিন মধ্যে স্ক্রিপ্ট করা, এটা আপেক্ষিক পাথ ব্যবহার $ HOME.I করতে দেখেছি এই .এবং আমি লাগাতে চেষ্টা HOME=$HOMEপ্রথম পরিবেশ ফাইলে। কিন্তু পরিষেবাটি আরম্ভ করতে পারেনি, কোনও ত্রুটি নেই।
জর্জ

1
উবুন্টুতে আমাকে সিস্টেমড নয় এটি সিস্টেমডের জন্য সিস্টেমেটেল ব্যবহার করতে হয়েছিল, সিস্টেমড ব্যবহার করে আমার একটি ত্রুটি পেয়েছে "অতিরিক্ত যুক্তি"
আলেকজান্ডার মিলস

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