সিস্টেমেড সার্ভিস শুরু করার আগে chdir চালানো হচ্ছে


148

প্রশ্ন: আমি সিস্টেমেড দিয়ে কোনও প্রক্রিয়া শুরু করতে পারি এবং সেই প্রক্রিয়াটি আমার পছন্দের একটি কার্যনির্বাহী ডিরেক্টরি নির্ধারণ করতে পারি?

আমার একটি পরিষেবা রয়েছে যা আমি শুরু করতে চাই systemd। যখন সেই পরিষেবা শুরু করা হচ্ছে, আমি এটিকে একটি বর্তমান ওয়ার্কিং ডিরেক্টরি নির্ধারণ করতে সক্ষম হতে চাই। আমি যদি ব্যবহার করতাম তবে এটি কীভাবে করতে হয় তা আমি জানি initতবে আমার সমস্যা হচ্ছে systemd

আমি এখানে কাজ করার চেষ্টা করে যাচ্ছি।

আমার পরিষেবা

আমি পাইথনে লিখিত একটি সাধারণ ইউটিলিটি ("listdir") তৈরি করেছি এবং এতে রেখেছি /opt/bin/listdir:

#! /usr/bin/python

import os

print 'Current working directory: %s' % (os.getcwd())

আমার কনফিগারেশন ফাইল

তারপরে আমি এর listdir.serviceজন্য একটি ফাইল তৈরি করেছি systemdএবং এটি এখানে রেখেছি /lib/systemd/system/listdir.service:

[Unit]
Description=Test of listing CWD.

[Service]
ExecStartPre=chdir /usr/local
ExecStart=/opt/bin/listdir
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target

সমস্যা

যখন আমি systemctl start listdirআমার সিস্টেম লগ চালনা করি তত্ক্ষণাত চলন ডিরেক্টরি হিসাবে রুট ডিরেক্টরি ("/") রেকর্ড করে। অবশ্যই, আমি /usr/localবর্তমান ডিরেক্টরি হিসাবে প্রত্যাশা করেছি , যেহেতু আমি ভেবেছিলাম ExecStartPreপ্রক্রিয়া শুরু করার আগে ডিরেক্টরিগুলি পরিবর্তন করা হবে।

স্পষ্টতই, আমি কল্পনা করছি যা systemdশেল স্ক্রিপ্টের মতো কিছু কাজ করবে (যদিও আমি জানি এটি শেল স্ক্রিপ্ট নয়)। আমার কী করা উচিত তা সম্পর্কে কেউ আমাকে ধারণা দিতে পারেন? এটি ব্যবহার করে কোনও ওয়ার্কিং ডিরেক্টরি সেট করা কি সম্ভব systemd? ধন্যবাদ!


সম্পাদনা: আমার সিস্টেম লগ একটি ত্রুটি রিপোর্ট করছে। (আমি শুধু লক্ষ্য করেছিলাম.)

Executable path is not absolute, ignoring: chdir /usr/local 

সুতরাং, chdirএকটি শেল কমান্ড, এবং নিজেই এক্সিকিউটেবল নয়। ঠিক আছে. কিন্তু আমার কি এখনও ডিরেক্টরি ব্যবহার করে ডিরেক্টরি পরিবর্তন করার কিছু উপায় আছে systemd?

উত্তর:


270

সিস্টেমেড> = 227 এ আপনার ব্যবহার করতে সক্ষম হওয়া উচিত:

[Service]
WorkingDirectory=/usr/local

আপনার স্ক্রিপ্টটি সেখানে কার্যকর করতে হবে।

( ডকস )


4
আপনি এটি কিভাবে পেলেন? এটি ডকুমেন্টেশনের কোথাও উল্লেখ করা হয়নি !
জামেশফিশার


3
@ এরিকরেনুফ আহা, তাদের কেবল
সেবারের

3
সুতরাং শুধু স্পষ্টতার জন্য, এই [Service]বিভাগে যেতে হবে ?
dthor

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