সিস্টেমড স্ক্রিপ্ট শুরু করতে পারে না?


9

আমার একটি বেস-স্ক্রিপ্ট রয়েছে যা আমি শুরুতে চালাতে চাই to আমার সিস্টেমটি সিস্টেমে চলছে তাই আমি যা মনে করি সেগুলি প্রয়োজনীয় তথ্য সহ একটি রক্ষণ ফাইল তৈরি করেছি:

[Unit]
Description=My Script
After=network.target

[Service]
ExecStart=/home/myscript.sh

[Install]
WantedBy=multi-user.target

আমি এটি পুনরায় চালু করার জন্য 'নিবন্ধকরণ' করতে সক্ষম সিস্টেমসিটিএল ব্যবহার করেছি। বুট করার সময় আমাকে বলা হয়েছিল আমার স্ক্রিপ্টটি কার্যকর করা হবে, তবে আমি স্ক্রিপ্টে যা লিখেছি তা ECHO স্ক্রিনে প্রদর্শিত হতে পারে না বা এটি কোনও ফাইলকে কিছু লিখেনি। অতিরিক্তভাবে, এটি যে অ্যাপ্লিকেশনটি শুরু করার কথা বলেছিল তা আরম্ভ করে না।

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

আপনারা কেউ জানেন কি আমার সমস্যা হতে পারে?


3
স্পষ্টতই, যদি আপনার স্ক্রিপ্টটি অন্য কিছু শুরু করে তবে এর জন্য "টাইপ = কাঁটাচামচ" দরকার, আমি আগে সেটিংসের সাথে গোলযোগ না করার জন্য কিছুটা বোকা বোধ করি।
টোকিওউইউজ

1
এটি সমাধানের জন্য +1। দয়া করে আপনার সমাধানটি উত্তর হিসাবে পোস্ট করুন এবং একই সমস্যাযুক্ত অন্যান্য ব্যক্তিদের সহায়তা করতে এটি গ্রহণ করুন।
টেরডন

1
@ টোকিওউউউউজ: আরও স্পষ্টভাবে, স্ক্রিপ্টটি যদি অন্য কিছু শুরু করে এবং শিশুরা চলমান অবস্থায় প্রস্থান করে , এর জন্য "টাইপ = কাঁটাচামচ" দরকার।
ব্যবহারকারী1686

উত্তর:


7

টোকিওউইউএমইউএস নিজের দ্বারা যা খুঁজে পেয়েছিল তা ছাড়াও ...

স্পষ্টতই, যদি আপনার স্ক্রিপ্টটি অন্য কিছু শুরু করে তবে এর জন্য "টাইপ = কাঁটাচামচ" দরকার

(যা পুরোপুরি সঠিক নয় - Type=forkingআপনার স্ক্রিপ্টটি শিশুদের চলাকালীন যদি প্রস্থান হয় কেবল তখনই প্রয়োজনীয় হয় )

... অন্যান্য সম্ভাব্য সমস্যাগুলি হ'ল:

  1. আমি অনুমান করছি যে "স্ক্রিনে প্রদর্শন" করার মাধ্যমে আপনি বোঝাতে চেয়েছিলেন যে স্ক্রিপ্টটি স্ট্যাডআউটকে কেবল কিছু লিখতে পারে। এই আছে না বুট করার সময় পর্দা যান - বরং, একটি পরিষেবা এর stdout- এ থেকে সবকিছু পাঠানো হয় জার্নাল (অথবা আপনার systemd হল সংস্করণের উপর নির্ভর করে syslog করার জন্য)।

  2. আপনি যদি হয়নি আসলে পর্দায় লিখন (ব্যবহার যেমন প্রচেষ্টা echo Hi >/dev/tty1), তারপর এটি খুব সম্ভাব্য যে স্ক্রিপ্টের আউটপুট disappears যখন agetty লগইন অনুরোধ জানানো দেখাচ্ছে হওয়ার পূর্বে স্ক্রীন মুছে যায়। (এটি এড়াতে আপনাকে ইউনিট অর্ডার করতে হবে After=getty@tty1.service)।

  3. কোনও ফাইলে কিছু লেখার জন্য আপনার ফাইল-সিস্টেমটি পঠন-লিখনের মাউন্ট করা আবশ্যক। এই জন্য, প্রয়োজনীয় After=local-fs.target হতে পারে , অন্যথায় ইউনিট আবার খুব তাড়াতাড়ি শুরু হতে পারে। তবে এটি নির্দিষ্ট ওএস কনফিগারেশনের উপর নির্ভর করে।


1

যদি আপনার স্ক্রিপ্ট এক্সিকিউসটপ ধারাটিও সংজ্ঞায়িত করে, এক্সেসস্টার্টের পরে এক্সেসস্টপ স্বয়ংক্রিয়ভাবে কল করা এড়াতে আপনাকে " RemainAfterExit = হ্যাঁ" সেট করতে হবে । এটি এক্সিকিস্টার্ট কমান্ড কার্যকর করার পরে আপনার পরিষেবাটি " সক্রিয় " অবস্থায় থাকতে দেয় ।

[Service]
ExecStart=/home/myscript.sh start
ExecStop=/home/myscript.sh stop
RemainAfterExit=yes
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.