उपयोगकर्ता लॉगिन के बाद एक सिस्टमड सेवा कैसे शुरू करें और उपयोगकर्ता लॉगआउट से पहले इसे रोक दें


10

मेरे पास फेडोरा 23 मशीन है।

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

क्या कुछ ऐसा है जो मैं अपनी सेवा के सिस्टमड फ़ाइल से कर सकता हूं या क्या मुझे स्क्रिप्ट में अपने कोड से यह जांचना होगा?

मुझे केवल यह सुनिश्चित करने की आवश्यकता है कि मेरे पास पर्यावरण चर (जैसे US USER) की पहुंच है और इसे सेवा के रूप में चलाना है।

प्रलेखन का मेरा मुख्य स्रोत यह लिंक है https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-Managing-Services_with_systemd-Unit_Files.html


systemctl --userF23 पर काम करता है ?
user1686

मुझे ऐसा लगता है, यह एक सूची और एक संदेश देता है 76 loaded units listed
जॉर्जकैफ 9:16

यहां एक और दृष्टिकोण है जो आपके लिए काम कर सकता है: unix.stackexchange.com/a/109270/111707 एक छोटा पायथन स्क्रिप्ट लिखें, जिसे आप .bashrcलॉगिन से लॉन्च करते हैं , फिर यह गनोम लॉगआउट सिग्नल के लिए सुनता है और खुद को बंद कर देता है।
IanB

@IanB धन्यवाद, मैं इसका परीक्षण करूंगा। यह कभी नहीं होता है कि आसपास कुछ ऐसा हो।
जॉर्जकैफ

जवाबों:


15

सिस्टम सत्र का उपयोग करें इसमें पहले से ही उपयोगकर्ता सत्रों का समर्थन शामिल है, वास्तव में आपको पहले से ही इस पर निर्भर होना चाहिए (अनजाने में)।

सेवा निर्देशिका बनाएँ

mkdir -p $HOME/.local/share/systemd/user

एक सेवा फ़ाइल संपादित करें (vim, gedit, geany - जो भी आप चाहते हैं)

vim $HOME/.local/share/systemd/user/my.service

यदि यह एक स्थायी सेवा है, तो इसे लगभग इसी तरह देखना चाहिए।

[Unit]
Description=My very own Service
[Service]
Type=simple
TimeoutStartSec=0
ExecStart=/path/to/start/script arguments
[Install]
WantedBy=default.target

लेकिन ऐसा लगता है कि आप इसे एक बार ट्रिगर करना चाहते हैं, फिर इसके साथ अच्छा होना चाहिए, इसलिए इस तरह से एक ऑनशॉट कॉन्फ़िगरेशन का उपयोग करें:

[Service]
Type=oneshot
RemainAfterExit=true
StandardOutput=journal
ExecStart=/path/to/start/script arguments
ExecStop=/path/to/stop/script arguments
[Install]
WantedBy=default.target

यह पाठ्यक्रम मानता है कि आपकी स्क्रिप्ट निष्पादन योग्य है, अर्थात:

chmod a+x /path/to/start/script
chmod a+x /path/to/stop/script

वरना आपको संबंधित दुभाषिया के लिए रास्ता तैयार करना होगा:

ExecStart=/bin/bash /path/to/start/script arguments

अब पुनः लोड प्रणाली (और परीक्षण के लिए फिर से लॉगिन)

systemctl --user enable my.service # enables the service
systemctl --user # should display your new unit in the list
journalctl --user should show the log

यदि आपको उदाहरण के लिए आर्क-विकी के बारे में अधिक जानकारी की आवश्यकता है । इस आस्कुबंटु धागे में संयोगवश खदान सहित विभिन्न विचार हैं।

आप विश्व स्तर पर सेवा को परिभाषित करके अन्य उपयोगकर्ताओं के लिए व्यवहार (यदि आप मूल हैं) का विस्तार कर सकते हैं। ऐसा करने के लिए आपको सेवा फ़ाइल / usr / share / systemd / user / not में $ HOME / .local / share / systemd / user को बनानी होगी ।


1
नमस्ते, उत्तर अच्छा था। लेकिन यह केवल तभी काम करेगा जब सेवा को पहले लॉगिन पर शुरू किया जाए और अंतिम उपयोगकर्ता सत्र में रोका जाए ।
अनवर

4
सेवा को सक्षम करते समय आपको --user ध्वज की आवश्यकता होती है। "systemctl --user my.service को सक्षम करें"
blushrt

0

मैं इसे कुछ साल पुराना जानता हूं, लेकिन चिंता के जवाब से मुझे मदद मिली। इसलिए, मुझे लगता है कि यह अभी भी पुनः लागू है। इसके अलावा, यह एक टिप्पणी की अधिक है, लेकिन मेरे पास यह नहीं है कि मैं इसे "उत्तर" के रूप में पोस्ट कर दूं। किसी भी कीमत पर...

लिनक्स मिंट 19 को चलाने पर, मैं उस सेवा को "सक्षम" नहीं कर सका जब स्क्रिप्ट '$ HOME / .local / share / systemd / user' में स्थित थी। ऐसा करने का प्रयास हमेशा एक त्रुटि के रूप में हुआ। हालाँकि, मैं इसे '$ HOME / .local / share / systemd / user' डायरेक्टरी से ठीक-ठीक शुरू कर सकता हूं। स्क्रिप्ट को '/ usr / share / systemd / user /' में ले जाने के बाद, systemd ने मुझे इसे बिना समस्या के सक्षम करने की अनुमति दी।

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