प्रश्न: क्या मैं सिस्टमैड के साथ एक प्रक्रिया को बंद कर सकता हूं और उस प्रक्रिया को अपने चुनने की कार्यशील निर्देशिका सौंप सकता हूं?
मेरे पास एक सेवा है जिसे मैं शुरू करना चाहता हूं systemd। जब वह सेवा शुरू की जा रही है, तो मैं इसे एक वर्तमान कार्यशील निर्देशिका सौंपने में सक्षम होना चाहता हूं। मैं ऐसा करने के तरीके अगर मैं उपयोग कर रहा था पता initहै, लेकिन मैं कुछ समस्या आ रही systemd।
यहाँ मैं काम करने की कोशिश कर रहा हूँ।
मेरी सेवा
मैंने एक साधारण उपयोगिता बनाई ("श्रोता"), जिसे पायथन में लिखा गया है, और इसमें रखा गया है /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?