প্রশ্ন: আমি সিস্টেমেড দিয়ে কোনও প্রক্রিয়া শুরু করতে পারি এবং সেই প্রক্রিয়াটি আমার পছন্দের একটি কার্যনির্বাহী ডিরেক্টরি নির্ধারণ করতে পারি?
আমার একটি পরিষেবা রয়েছে যা আমি শুরু করতে চাই 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
?