क्या यह जानने का एक तरीका है कि सिस्टम टाइमर कब आगे चलेगा?


19

मैं एक सिस्टम टाइमर का परीक्षण कर रहा हूं और इसके डिफ़ॉल्ट टाइमआउट को ओवरराइड करने की कोशिश कर रहा हूं, लेकिन सफलता के बिना। मैं सोच रहा हूं कि क्या सिस्टम को पूछने का एक तरीका है कि हमें यह बताएं कि सेवा अगले के लिए कब चलने वाली है।

सामान्य फ़ाइल ( /lib/systemd/system/snapbackend.timer):

# Documentation available at:
# https://www.freedesktop.org/software/systemd/man/systemd.timer.html

[Unit]
Description=Run the snapbackend service once every 5 minutes.

[Timer]
# You must have an OnBootSec (or OnStartupSec) otherwise it does not auto-start
OnBootSec=5min
OnUnitActiveSec=5min
# The default accuracy is 1 minute. I'm not too sure that either way
# will affect us. I am thinking that since our computers will be
# permanently running, it probably won't be that inaccurate anyway.
# See also:
# http://stackoverflow.com/questions/39176514/is-it-correct-that-systemd-timer-accuracysec-parameter-make-the-ticks-slip
#AccuracySec=1

[Install]
WantedBy=timers.target

# vim: syntax=dosini

ओवरराइड फ़ाइल ( /etc/systemd/system/snapbackend.timer.d/override.conf):

# This file was auto-generated by snapmanager.cgi
# Feel free to do additional modifications here as
# snapmanager.cgi will be aware of them as expected.
[Timer]
OnUnitActiveSec=30min

मैंने निम्न आदेशों को चलाया और टाइमर हर 5 मिनट में एक बार टिक जाता है। वहाँ systemd में एक बग हो सकता है?

sudo systemctl stop snapbackend.timer
sudo systemctl daemon-reload
sudo systemctl start snapbackend.timer

तो मैं भी सोच रहा था, मुझे कैसे पता चलेगा कि टाइमर कब टिकेगा? क्योंकि यह तुरंत मुझे बताएगा कि क्या यह 5 मिनट में है। या 30 मि। लेकिन इस systemctl status snapbackend.timerबारे में कुछ नहीं कहता है। बस सोच रहा था कि क्या कोई ऐसी आज्ञा है जो मुझे बताएगी कि वर्तमान में उपयोग में देरी है।

रुचि रखने वालों के लिए, सेवा फ़ाइल भी है ( /lib/systemd/system/snapbackend.service), हालांकि मुझे लगता है कि यह टाइमर टिक पर कोई प्रभाव नहीं होना चाहिए ...

# Documentation available at:
# https://www.freedesktop.org/software/systemd/man/systemd.service.html

[Unit]
Description=Snap! Websites snapbackend CRON daemon
After=snapbase.service snapcommunicator.service snapfirewall.service snaplock.service snapdbproxy.service

[Service]
# See also the snapbackend.timer file
Type=simple
WorkingDirectory=~
ProtectHome=true
NoNewPrivileges=true
ExecStart=/usr/bin/snapbackend
ExecStop=/usr/bin/snapstop --timeout 300 $MAINPID
User=snapwebsites
Group=snapwebsites
# No auto-restart, we use the timer to start once in a while
# We also want to make systemd think that exit(1) is fine
SuccessExitStatus=1
Nice=5
LimitNPROC=1000
# For developers and administrators to get console output
#StandardOutput=tty
#StandardError=tty
#TTYPath=/dev/console
# Enter a size to get a core dump in case of a crash
#LimitCORE=10G

[Install]
WantedBy=multi-user.target

# vim: syntax=dosini

1
क्या आउटपुट systemctl list-timersमदद करता है?
phg

आह! उस पर खोज करते हुए, मैंने इस पृष्ठ को समाधान के साथ पाया: bbs.archlinux.org/viewtopic.php?id=214989 मैं अब एक उत्तर लिखूंगा।
एलेक्सिस विल्के

जवाबों:


25

वर्तमान में सक्रिय टाइमर की स्थिति का उपयोग करके दिखाया जा सकता है systemctl list-timers:

$ systemctl list-timers --all
NEXT                         LEFT     LAST                         PASSED       UNIT                         ACTIVATES
Wed 2016-12-14 08:06:15 CET  21h left Tue 2016-12-13 08:06:15 CET  2h 18min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service

1 timers listed.

7

@ एफजी टिप्पणी और उत्तर से, मुझे उत्तर के साथ एक पृष्ठ मिला। टाइमर संचयी हैं और आपको उन्हें पहले रीसेट करने की आवश्यकता है अन्यथा पिछली प्रविष्टि आसपास रहती है। यह कैलेंडर के लिए उपयोगी है, लेकिन यह सभी टाइमर के साथ समान काम करता है।

एक प्रविष्टि होना जो टाइमर को एक नए मान में बदलने से पहले रीसेट करता है, उम्मीद के मुताबिक काम करता है:

# This file was auto-generated by snapmanager.cgi
# Feel free to do additional modifications here as
# snapmanager.cgi will be aware of them as expected.
[Timer]
OnUnitActiveSec=
OnUnitActiveSec=30min

1

नहीं, ऐसा कोई तरीका नहीं दिखाई देता है, जब टाइमर कब चलेगा, यह ठीक से नहीं देखा जा सकता है। systemdप्रस्तावों systemctl list-timersऔर systemctl status something.timer, लेकिन उन का कोई असर नहीं दिखाते हैं AccuracySec=और संभवतः अन्य निर्देशों उस समय बदलाव।

यदि आप AccuracySec=1hदो सर्वरों पर सेट होते हैं, तो वे दोनों रिपोर्ट करेंगे कि दोनों सर्वरों पर एक ही टाइमर एक ही समय में आग लगा देगा, लेकिन वास्तव में वे एक घंटे तक अलग हो सकते हैं! यदि आपको यह जानने में दिलचस्पी है कि क्या दो यादृच्छिक टाइमर टकरा सकते हैं, तो पता लगाने के लिए अंतिम गणना रन समय की जांच करने का कोई तरीका नहीं है।

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


टाइमर के बारे में दिलचस्प बिंदु। list-timersहालाँकि हमें जो जानकारी मिलती है , वह पहले से ही यह समझने के लिए बहुत अच्छी है कि आपका टाइमर का उपयोग सही है या नहीं।
एलेक्सिस विलके

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

आह। मेरी भी ऐसी ही समस्याएं हैं। मैं एक चयनित मास्टर (एक वोट प्रणाली का उपयोग करके) का उपयोग करता हूं और मास्टर कंप्यूटर 1 को एक संदेश "रखरखाव" करता है, एक बार कंप्यूटर 1 हो जाने के बाद, यह मास्टर को अपनी नई स्थिति की रिपोर्ट करता है जो तब कंप्यूटर 2 को इसका रखरखाव करने के लिए कहता है, आदि उन कंप्यूटरों में से एक बेशक मास्टर होगा, लेकिन रखरखाव लूप चलाने वाला कोड वास्तविक रखरखाव से अलग होना चाहिए। एक समस्या ध्यान में रखना। यदि आपका क्लस्टर काफी विकसित हो रहा है, तो याद रखें कि इसमें समय लगता है और यह इतना लंबा हो सकता है कि कुछ कंप्यूटर लंबे समय तक अपडेट न हों!
एलेक्सिस विल्के
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.