Systemd सेवा शुरू करने से पहले Chdir को निष्पादित करना


148

प्रश्न: क्या मैं सिस्टमैड के साथ एक प्रक्रिया को बंद कर सकता हूं और उस प्रक्रिया को अपने चुनने की कार्यशील निर्देशिका सौंप सकता हूं?

मेरे पास एक सेवा है जिसे मैं शुरू करना चाहता हूं 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?

जवाबों:


270

सिस्टमड> = 227 पर आपको उपयोग करने में सक्षम होना चाहिए:

[Service]
WorkingDirectory=/usr/local

वहाँ निष्पादित करने के लिए अपनी स्क्रिप्ट प्राप्त करने के लिए।

( DOCS )


4
आपको यह कैसे लगी? दस्तावेज में कहीं भी इसका उल्लेख नहीं है !
जेम्सफिशर


3
@ EricRenouf अहा, उन्हें सेवा प्रलेखन में केवल उन साझा विकल्पों की नक़ल करनी चाहिए
jameshfisher

3
तो सिर्फ स्पष्टता के लिए, क्या यह [Service]खंड में जाएगा?
डेथ

4
अपने आप को जवाब देते हुए, इसने संस्करण के बावजूद नवीनतम CentOS 7 पर काम किया।
ब्रूनो जेसीएम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.