Systemd के लिए स्टार्टअप स्क्रिप्ट कैसे लिखें


233

मेरे लैपटॉप पर 2 ग्राफिक्स कार्ड हैं। एक है IGP और दूसरा असतत।

मैंने असतत ग्राफिक्स कार्ड को बंद करने के लिए एक शेल स्क्रिप्ट लिखी है।

इसे स्टार्ट-अप पर चलाने के लिए मैं इसे सिस्टमड स्क्रिप्ट में कैसे बदल सकता हूँ?

जवाबों:


332

ऐसा करने के लिए मुख्य रूप से दो दृष्टिकोण हैं:

  • यदि आपको कोई स्क्रिप्ट चलाना है, तो आप उसे कनवर्ट नहीं करते हैं, बल्कि स्क्रिप्ट को एक systemdसेवा के माध्यम से चलाते हैं ।

इसलिए आपको दो फ़ाइलों की आवश्यकता है: स्क्रिप्ट और .serviceफ़ाइल (यूनिट कॉन्फ़िगरेशन फ़ाइल)।
सुनिश्चित करें कि आपकी स्क्रिप्ट निष्पादन योग्य है और पहली पंक्ति ( शेलबैंग ) है #!/bin/sh। फिर .serviceफ़ाइल को बनाएं /etc/systemd/system(एक सादा पाठ फ़ाइल, चलो इसे कॉल करें vgaoff.service)।
उदाहरण के लिए:

  1. लिपी: /usr/bin/vgaoff
  2. इकाई फ़ाइल: /etc/systemd/system/vgaoff.service

अब, यूनिट फ़ाइल को संपादित करें। इसकी सामग्री इस बात पर निर्भर करती है कि आपकी स्क्रिप्ट कैसे काम करती है:

अगर vgaoffबस gpu से शक्तियां, उदाहरण के लिए:

exec blah-blah pwrOFF etc 

तब की सामग्री vgaoff.serviceहोनी चाहिए:

[Unit]
Description=Power-off gpu

[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff

[Install]
WantedBy=multi-user.target

यदि vgaoffजीपीयू को बंद करने और इसे वापस चालू करने के लिए उपयोग किया जाता है, जैसे:

start() {
  exec blah-blah pwrOFF etc
}

stop() {
  exec blah-blah pwrON etc
}

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

तब की सामग्री vgaoff.serviceहोनी चाहिए:

[Unit]
Description=Power-off gpu

[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff start
ExecStop=/usr/bin/vgaoff stop
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
  • सबसे तुच्छ मामलों के लिए, आप स्क्रिप्ट के बिना कर सकते हैं और एक निश्चित कमांड को सीधे निष्पादित कर सकते हैं:

बिजली बंद करने के लिए:

[Unit]
Description=Power-off gpu

[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"

[Install]
WantedBy=multi-user.target

बिजली बंद और चालू करने के लिए:

[Unit]
Description=Power-off gpu

[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"
ExecStop=/bin/sh -c "echo ON > /whatever/vga_pwr_gadget/switch"
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

एक बार जब आप फ़ाइलों के साथ कर लेते हैं, तो सेवा को सक्षम करें:

systemctl enable vgaoff.service

यह अगले बूट पर स्वचालित रूप से शुरू हो जाएगा। आप सक्षम भी कर सकते हैं और एक बार में सेवा शुरू कर सकते हैं

systemctl enable --now vgaoff.service

के रूप में systemd v.220(पुराने सेटअप पर आपको इसे मैन्युअल रूप से शुरू करना होगा)।
अधिक जानकारी के लिए systemd.serviceमैनुअल पेज देखें ।


समस्या निवारण
यहां शुरू करें:
किसी systemdसेवा का पूरा लॉग कैसे देखें ?
systemdसेवा निकास कोड और स्थिति सूचना स्पष्टीकरण


विस्तृत उत्तर के लिए धन्यवाद। स्क्रिप्ट में शामिल है एक आदेश "बंद गूंज> / sys / कर्नेल / डिबग / vgaswitcheroo / स्विच"
शारिक

यह निम्न संदेश के साथ विफल रहता है vgaoff.service - पावर-ऑफ gpu लोड: लोड किया गया (/usr/lib/systemd/system/vgaoff.service; सक्रिय) सक्रिय: विफल (परिणाम: निकास-कोड) Tue से, 11 सितंबर 2012 23: 46:46 +0530; 30s पहले प्रक्रिया: 5258 ExecStart = / usr / lib / systemd / script / vgaoff (कोड = बाहर, स्थिति = 203 / EXEC) CGroup: नाम = systemd: /system/vgaoff.gov.in
Sharique

उफ़, फिर से नहीं, मैंने इस छोटी सी बात को याद किया, यह ठीक काम कर रहा है .. फिर से धन्यवाद।
शारिक

5
@Bazon - इस तर्क के अनुसार, इस साइट पर हजारों जवाब अनुभवहीन उपयोगकर्ताओं के लिए "संभावित जाल" हैं। जो लोग नहीं जानते हैं / पूरी तरह से समझते हैं कि echo SOMETHING > /some/fileक्या (या किसी अन्य आदेश के रूप में) यह उनके सिस्टम पर सामान चलाने के प्रयास से पहले सीएलआई की मूल बातें से परिचित होना चाहिए। एक तरफ, FYI करें, पढ़ें कि लैपटॉप के कई मॉडलों पर dGPU को कैसे स्विच किया जाए, देखें कि क्या आपके द्वारा उपयोग किए जाने वाले कमांड को आपके सुझाव जैसी किसी चीज़ से बदला जा सकता है। इसके अलावा, मूल फ़ाइल को पुनर्स्थापित करने के लिए आप आमतौर पर इसके स्वामित्व वाले पैकेज को पुनर्स्थापित करते हैं।
don_crissti

4
@don_crissti वूप्स! पारितोषिक के लिए धन्यवाद। (भ्रामक जानकारी के प्रचार से बचने के लिए मेरी मूल टिप्पणी को हटा दिया गया।)
वुडरो बारलो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.