विशिष्ट समय पर एक systemd.service प्रारंभ / बंद करें


14

मैं विशिष्ट समय पर एक systemd.service को शुरू और बंद करना चाहता हूं। संभवत: मैं नौकरी शुरू करने के लिए एक .timer इकाई का उपयोग करूंगा, लेकिन क्या एक विशिष्ट अवधि के बाद, या एक विशिष्ट समय के बाद नौकरी को रोकने के लिए एक तरह से बनाया गया है , या क्या मुझे एक दूसरी .timer इकाई का निर्माण करना है जो निष्पादित करता है stop?

धन्यवाद

जवाबों:


6

टाइमर के साथ एक सेवा ए को रोकने के लिए, आप एक प्रकार की सेवा बी बना सकते हैं oneshotजिसके साथ यह संघर्ष में होगा , फिर सेवा बी को शुरू करने के लिए एक टाइमर का उपयोग करें।

यदि एक इकाई में एक विरोधाभास है = दूसरी इकाई पर सेटिंग, पूर्व को शुरू करने से बाद वाला और इसके विपरीत बंद हो जाएगा। ( स्रोत )

एक सेवा:

[Unit]
Conflicts=B.service
...

B.service:

[Unit]
Description=B service description

[Service]
Type=oneshot
ExecStart=/bin/echo ''

B.timer:

[Timer]
AccuracySec=1
OnActiveSec=10

[Install]
WantedBy=timers.target

निम्नलिखित 10 सेकंड के बाद सेवा ए को रोक देगा।

systemctl start A.service
systemctl start B.timer

2

आप क्रोन नौकरियों के एक जोड़े का उपयोग कर सकते हैं:

 # 0 मिनट (0 - 59) 
 # ┌────────────── │ घंटा (0 - 23)
 # - 31 ┌─────────────── महीने का दिन (1 - 31)
 # │ 12 │ ┌──────────────── महीने (1 - 12)
 # Of week │ │ │ सप्ताह का दिन (0 - 6)
 # │ │ │ │ │
 # │ │ │ │ │
   * * * * * systemctl शुरू $ SERVICE.service
   * * * * * systemctl stop $ SERVICE.service

Cron पर अधिक जानकारी: https://en.wikipedia.org/wiki/Cron , https://wiki.archlinux.org/index.php/Cron


8
क्रॉन जॉब ओपीडी को .timerपहले से ही जानने वाली सिस्टम यूनिट्स पर एक सुधार कैसे है ?
पावेल Paमेरदा

मैं कर सकता था, हाँ, लेकिन मेरा सवाल यह है कि सिस्टमड के साथ इसे ठीक से कैसे किया जाए? मेरा मानना ​​है कि किसी विशिष्ट समय पर या एक निश्चित अवधि के बाद नौकरी रोकने का कोई मानक तरीका होना चाहिए।
जेमी किट्सन

@JamieKitson ईमानदार मैं वहाँ नहीं लगता कि वास्तव में है होना करने के लिए की जरूरत है क्रॉन और systemd टाइमर से परे एक ऐसी विशेषता किया जाना है। अधिकांश सिस्टमड इंस्टालेशन इस तरह की सुविधाओं का उपयोग कभी नहीं करेंगे और systemctlक्रोन, सिस्टमड टाइमर और जो कुछ भी आपको पसंद है, उसका उपयोग करने में कोई गड़बड़ नहीं है । मेरी राय में यह उत्तर किसी अन्य उत्तर की तरह ही मान्य है।
पावेल Paमरदा

आप उदाहरण के लिए www-data को systemctl start & stop चलाने की अनुमति कैसे देते हैं?
अल्वारोपगल 12

@alvaropgl आपकी टिप्पणी का उपयोगकर्ताओं (www-data) से कोई लेना-देना नहीं है और उन्हें कौन-सी सीमित प्रक्रिया (सिस्टमक्टेल) चलानी चाहिए / नहीं, यह विषय है। कृपया कोई नया विषय प्रारंभ करें। संकेत: आप शायद www-डेटा उपयोगकर्ता पर अधिक जिम्मेदारी + स्कोप को सक्षम करने के अपने वर्तमान दृष्टिकोण के बजाय अपनी इच्छित चीजों को करने के लिए एक एपीआई बनाना चाहते हैं।
स्कॉट प्रिव

2

.serviceफ़ाइल में कुछ रनटाइम कॉन्फ़िगर किए जाने के बाद वास्तव में एक सेवा को रोकने का एक और तरीका है ।

RuntimeMaxSec=...

आप इस तथ्य को पसंद नहीं कर सकते हैं कि सेवा को विफल माना जाता है लेकिन यह लंबे समय तक चलने वाली सेवा को मारने का अधिक या कम तार्किक परिणाम है।

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


1
हां, हमने मेलिंग सूची पर इस और इसकी सीमाओं पर चर्चा की: lists.freedesktop.org/archives/systemd-devel/2016-April/…
जेमी

1
असामान्य। एक संसाधन-मांग सेवा चलाने के बारे में क्या, शायद SETI, रात के समय ही, जब सर्वर को कम से कम यातायात मिलता है। इसके अलावा, जहां मैं काम करता हूं, हमारे पास एक अलर्ट डेमॉन है जो सर्वर पर अपवाद होने पर अपने फोन के माध्यम से समर्थन टीम को जगाने के लिए डिज़ाइन किया गया है। हम वास्तव में उस कष्टप्रद बात को नहीं चलाना चाहते हैं जब हम वास्तव में जाग रहे होते हैं क्योंकि उन सर्वरों में चोटी के उपयोग के दौरान बाएं और दाएं की समस्याएं होती हैं।
जेम्स एम। ले
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.