बूट पर मेरी सक्षम सिस्टमड सेवा शुरू क्यों नहीं होगी?


20

मेरे पास निम्नलिखित systemd इकाई फ़ाइल है /etc/systemd/system/emacs.service:

[Unit]
Description=Emacs: the extensible, self-documenting text editor
Documentatin=man:emacs(1) info:Emacs


[Service]
Type=forking
ExecStart=/usr/bin/emacs --daemon
ExecStop=/usr/bin/emacsclient --eval "(progn (setq kill-emacs-hook nil) (kill-emacs))"
Restart=always
Environment=DISPLAY=:%i
TimeoutStartSec=0

[Install]
WantedBy=default.target

मैं चाहता हूं कि यह बूट पर शुरू हो, इसलिए मैंने प्रवेश किया है systemctl enable emacs

हालाँकि, हर बार मेरी सेवा रिबूट, systemctl status emacsशो:

● emacs.service - Emacs: the extensible, self-documenting text editor
   Loaded: loaded (/etc/systemd/system/emacs.service; disabled; vendor preset: enabled)
   Active: inactive (dead)

लेकिन फिर systemctl start emacsस्टेटस रिटर्न दर्ज करना और जांचना:

● emacs.service - Emacs: the extensible, self-documenting text editor
   Loaded: loaded (/etc/systemd/system/emacs.service; disabled; vendor preset: enabled)
   Active: active (running) since Fri 2016-11-11 23:03:59 UTC; 4s ago
  Process: 3151 ExecStart=/usr/bin/emacs --daemon (code=exited, status=0/SUCCESS)
 Main PID: 3154 (emacs)
    Tasks: 2
   Memory: 7.6M
      CPU: 53ms
   CGroup: /system.slice/emacs.service
           └─3154 /usr/bin/emacs --daemon

मैं बूट पर सफलतापूर्वक प्रारंभ करने के लिए यह प्रक्रिया कैसे प्राप्त कर सकता हूं?

जवाबों:


9

मुझे नहीं पता कि मुझे काम करने के लिए ऐसा क्यों है:

हटाए गए Environment=DISPLAY=:%i

एक User=चर जोड़ा

सुनिश्चित करें कि सही फ़ाइल में था /etc/systemd/system/emacs.service(पहले यह एक कड़ी थी)

और फिर से भाग गया systemctl enable emacs

इससे काम बन गया।

संपादित करें यहां वास्तविक समस्या यह है कि मेरे पास लाइन 3 में एक टाइपो था: Documentatin

मैंने जांच करके यह पाया journalctl। मैं सुझाव देता हूं कि जिन लोगों के पास सिस्टम स्क्रिप्ट के साथ समस्या है, वे वही करें, जिसमें कोई त्रुटि नहीं थी।


क्या यह भी एक रिबूट पर काम करता है? मुझे लगता है कि अगर डेमन मोड को एक्स 11 कनेक्शन की आवश्यकता नहीं है, तो After=...मुझे उल्लेख किए जाने की कोई आवश्यकता नहीं है ।
एलेक्सिस विल्के

1
हां यह रिबूट के बाद काम करता है। यह एक चित्रमय Emacs नहीं है, इसलिए X11 की आवश्यकता नहीं है। यह सिर्फ एक लाइन थी जिसे मैंने एक उदाहरण से कॉपी किया और ध्यान नहीं दिया।
1:12

3

ओह, यह दिलचस्प है।

एक यादृच्छिक सेवा इकाई चुनना और इसे घूरना, यह इसके बजाय एक विशिष्ट लक्ष्य पर निर्भर करता है default.target। उत्तरार्द्ध प्रतीकात्मक है ... एक विशिष्ट लक्ष्य के लिए एक कॉन्फ़िगर लिंक, शब्दार्थ यह समझ में नहीं आता है। (देखें systemctl set-default)

यह समझा सकता है कि आपके disabledसक्षम होने के बाद आपकी सेवा क्यों दिखाई देती है। उदाहरण के लिए, default.targetअपनी सेवा फ़ाइल में बदलने का प्रयास करें multi-user.target

(सक्षम करने में विफल होने पर त्रुटि की सूचना नहीं देना सिस्टमड में दोष की तरह लगता है। मुझे आश्चर्य है कि अगर आपके पास अब कोई निर्देशिका है /etc/systemd/system/default.target.wants)।


पत्रिका कमांड आपको बताता है कि क्या टूट गया (उदाहरण के लिए सक्षम क्यों विफल रहा है।) लिंक के लिए, यदि आप अपनी निजी सेवा बनाते हैं तो इसकी आवश्यकता नहीं है। इससे कोई फर्क नहीं पड़ता कि आप एक पैकेज बनाते हैं जिसे आप दूसरों को स्थापित / हटाने आदि के लिए चाहते हैं
एलेक्सिस विल्के

@AlexisWilke इससे भी बुरा होगा! पत्रिका को कुछ त्रुटियों की रिपोर्ट करने के लिए क्यों लिखा जाएगा?
sourcejedi

यह पत्रिका को सब कुछ लिखता है। जो मैंने देखा है, उससे आप केवल एक बहुत ही बुनियादी, सिस्टम विशिष्ट, त्रुटि देखते हैं यदि यह डेमॉन शुरू नहीं कर सकता है।
एलेक्सिस विल्के

2
उपयोगकर्ता ने एक मूल त्रुटि की भी रिपोर्ट नहीं की, उनका मानना ​​था कि ऑपरेशन सफल हो गया था और इसलिए रिबूट करने के लिए आगे बढ़ा। अंकित मूल्य पर, सिस्टमड में दोष है। उपयोगकर्ताओं के पास विफलता मोड भी होते हैं, लेकिन यह मेरे लिए ध्वनि की तरह नहीं था एक त्रुटि संदेश को पूरी तरह से अनदेखी करना इस प्रश्न में एक बहुत ही संभावित था।
sourcejedi

1
@sourcejedi मुझे पता नहीं है कि आप यह कैसे जानते हैं लेकिन हां, अब /etc/systemd/system/default.target.wants मेरे अंदर एक लिस्टिंग है जो कि मेरी सेवा फाइलें हैं। और हाँ, मुझे नहीं पता कि कोई त्रुटि थी।
स्टार्ट डेस

1

आपके पास एक DISPLAY वातावरण चर है, इसका मतलब है कि आप X11 शुरू करना चाहते हैं। इसलिए आपको तब तक अपनी सेवा को अवरुद्ध करने का एक तरीका होना चाहिए।

यह प्रयोग किया जाता है विकल्पAfter=...

मैंने इसे स्वयं नहीं किया है, इसलिए मैं यह नहीं कह सकता कि यह काम करेगा, लेकिन इसके साथ कुछ करने की संभावना है graphical.target

[Unit]
After=graphical.target

एक और संभावना है, अगर एक्स सर्वर तुरंत शुरू नहीं होता है (यानी आपके पास लाइटपैड या इस तरह की लॉगिन स्क्रीन है), तो आपको WantedBy=...इसके बजाय इसका उपयोग करना पड़ सकता है :

[Unit]
WantedBy=graphical.target

यदि आप इसे सिस्टमड के साथ काम करने के लिए थक गए हैं, तो आप सामान्य तरीके से देखना चाहते हैं कि एक्स-विंडोज प्रबंधक इसे काम कर सकते हैं।

नहीं है ~/.xprofileफ़ाइल है, जो की तरह काम करता ~/.bashrcफ़ाइल।

~/.config/autostart/*.desktopफाइलें भी है । यह स्वतः ही शुरू हो जाएगा जो कुछ भी अनुप्रयोगों को वहां परिभाषित किया गया है।

ये समाधान विस्तृत नहीं हैं, हालांकि, यदि आपके पास कई उपयोगकर्ता हैं, तो प्रत्येक को अपनी प्रविष्टि स्वयं करनी होगी। इसके अलावा, यह एप्लिकेशन को रूट के रूप में शुरू नहीं करता है, लेकिन आप इसके बजाय।


एक साइड नोट के रूप में, "लोड + निष्क्रिय (मृत)" संदेश का मतलब है कि सिस्टमड को प्रक्रिया शुरू करने के लिए एक कठिन समय था और परिणामस्वरूप इसे छोड़ने का फैसला किया । आप मैन्युअल रूप से परीक्षण कर सकते हैं कि name.serviceकाम करता है एक बार आप का उपयोग करके रिबूट किया गया:

systemctl stop <service-name>
systemctl start <service-name>

यह स्थिति को ताज़ा करेगा और जानकारी को सही मानते हुए सेवा को ठीक से शुरू करेगा। आप अतिरिक्त विवरण देखने के लिए फिर से स्थिति की जांच कर सकते हैं:

 systemctl status <service-name>

2
हम्म, मैंने उस पूरी लाइन को हटा दिया और कुछ भी नहीं बदला। इसके अलावा, (जैसा कि मैंने अपने प्रश्न में कहा था) यह सिस्टेक्टेल स्टार्ट एमएसीएस चलाने से ठीक होता है।
स्टार्ट

मेरा अद्यतन प्रश्न देखें। में एक टाइपो था Documentatin। आपके संकेत journalctlने यहां मेरी मदद की।
स्टार्ट डेस

0

यह डेबियन की कई सेवा फाइलों में एक बग है:

# systemctl enable watchdog
Synchronizing state of watchdog.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install enable watchdog
# find /etc/systemd/ | grep watch
# tail -n2 /lib/systemd/system/watchdog.service

[Install]

https://www.raspberrypi.org/forums/viewtopic.php?f=82&t=218609&p=1406567#p1406567 https://forum.armbian.com/topic/9115-still-dont-know-where-to-report -bugs-watchdogservice-मना कर दिया करने के लिए शुरू की वजह से करने के लिए टूट-सेवा-फ़ाइल /

वितरण स्तर तय करना है

echo "WantedBy=default.target" >> /lib/systemd/system/watchdog.service
systemctl daemon-reexec
systemctl enable watchdog
systemctl stop watchdog.service
systemctl start watchdog.service

इसके लिए कई मैनुअल विकल्प हैं।

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