रूट के अलावा एक उपयोगकर्ता के रूप में एक systemd सेवा चलाना!


18

मैंने निम्नलिखित सेवा, amos.service का निर्माण किया, और इसे amos (amos समूह के सदस्य) के रूप में चलाने की आवश्यकता है

[Unit]
Description=AMOS Service
After=network.target

[Service]
User=amos
Group=amos
Type=simple
WorkingDirectory=/usr/share/amos
ExecStart=/usr/share/amos/amos_service.sh start
ExecStop=/usr/share/amos/amos_service.sh stop
Restart=on-failure

[Install]
WantedBy=multi-user.target

सभी अनुमतियाँ पर निर्धारित किया गया है /usr/share/amosकरने के लिएamos:amos

amos_service.sh इस प्रकार है:

#!/bin/bash

CUDIR=$(dirname "$0")
cd /usr/share/amos

start() {
  exec /usr/share/amos/run_amos.sh >> /var/log/amos.log 2>&1  
}

stop() {
  exec pkill java 
}

case $1 in
  start|stop) "$1" ;;
esac

cd "$CURDIR"

जब मैं शुरू में निर्देशिका, अर्थ, रूट से संबंधित किसी भी संशोधन के बिना सेवा शुरू करता हूं, और amos.service उपयोगकर्ता समूह पैरामीटर नहीं है, सब कुछ महान चलाता है!

एक बार जब मैं निर्देशिका अनुमतियों को अमोस में बदल देता हूं: एमोस और एमोस जोड़ें। उपयोगकर्ता और समूह, सीरी काम नहीं करेगा और मुझे निम्नलिखित मिलते हैं: संलग्न छवि देखें

सेवा को चलाने का प्रयास करने के बाद त्रुटि


/Var/log/amos.log पर लॉग किए गए संदेशों के मामले में सफलता और विफलता के मामलों के बीच अंतर, यदि कोई हो, तो क्या है?
sourcejedi

साथ ही, यह कॉन्फ़िगरेशन विषम है जो /var/logरूट के स्वामित्व में है। मुझे लगता है कि आप एक निर्देशिका का उपयोग करना चाहते हैं /var/log/amos/जिसे आप एमोस के स्वामित्व में बनाते हैं।
sourcejedi

मैं उल्लेख के अनुसार
बनाऊंगा

जवाबों:


11

Systemd का उपयोग करें:

journalctl -xeसेवा शुरू करने के बाद समस्या का उपयोग करने के लिए।

आपको बैश स्क्रिप्ट की आवश्यकता नहीं है, इसे अपनी सेवा फ़ाइल में रखें:

ExecStart=/usr/share/amos/run_amos.sh

इसके लिए कोई ज़रूरत नहीं है ExecStop, सिस्टमड सभी बाल प्रक्रियाओं को रोक देगा। आप के साथ आउटपुट देख सकते हैं journalctl -u amos.service


4
ExecStart के बाद एक "=" होना चाहिए। मैं इसे ठीक नहीं कर सकता क्योंकि संपादन 6 वर्णों से कम होगा।
मार्क स्टोसबर्ग

5

मुझे लगता है कि आप सरल के बजाय फोर्किंग करना चाहते हैं। सरल मानता है कि आपकी प्रक्रिया बाहर नहीं निकलती है, इसलिए जब यह होता है, तो यह प्रक्रिया को मृत कहता है।

आप शायद amos_service.sh स्क्रिप्ट को निकालना चाहते हैं और इसे amos.service में कार्यक्षमता प्रदान करना चाहते हैं।


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