เริ่ม / หยุด systemd.service ในเวลาที่ระบุ


14

ฉันต้องการเริ่มและหยุด systemd.service ในบางช่วงเวลา สันนิษฐานว่าฉันจะใช้หน่วย. timer เพื่อเริ่มงาน แต่มีวิธีที่จะหยุดงานหลังจากระยะเวลาที่กำหนดหรือในเวลาที่กำหนดหรือฉันต้องสร้างหน่วย. timer ตัวที่สองที่ execs stop?

ขอบคุณ

คำตอบ:


6

หากต้องการหยุดบริการ A ด้วยตัวจับเวลาคุณสามารถสร้างบริการ B ประเภทoneshotที่ขัดแย้งกับบริการจากนั้นใช้ตัวจับเวลาเพื่อเริ่มบริการ B

หากหน่วยมีการตั้งค่า Conflicts = ในหน่วยอื่นการเริ่มต้นก่อนจะหยุดหลังและในทางกลับกัน (ที่มา )

A.service:

[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

ต่อไปนี้จะหยุดให้บริการ A หลังจาก 10 วินาที

systemctl start A.service
systemctl start B.timer

2

คุณสามารถใช้งาน cron สองงาน:

 # ┌─────────────นาที (0 - 59) 
 # │┌──────────────ชั่วโมง (0 - 23)
 # ││┌───────────────วันของเดือน (1 - 31)
 # │││┌────────────────เดือน (1 - 12)
 # ││││┌─────────────────วันในสัปดาห์ (0 - 6)
 # │││││
 # │││││
   * * * * * systemctl เริ่มต้น $ SERVICE.service
   * * * * * systemctl หยุด $ SERVICE.service

ข้อมูลเพิ่มเติมเกี่ยวกับ cron: https://en.wikipedia.org/wiki/Cron , https://wiki.archlinux.org/index.php/Cron


8
cron มีหน้าที่ปรับปรุง.timerหน่วยsystemd ที่ OP รู้จักอยู่แล้วอย่างไร
Pavel Šimerda

ฉันทำได้ แต่คำถามของฉันคือวิธีการทำอย่างถูกต้องกับ systemd? ฉันคิดว่าจะต้องมีวิธีมาตรฐานในการหางานให้หยุดในเวลาที่กำหนดหรือหลังจากระยะเวลาหนึ่ง
Jamie Kitson

@JamieKitson จะซื่อสัตย์ฉันไม่คิดว่ามีจริงความต้องการที่จะมีคุณลักษณะดังกล่าวเกิน cron และ systemd จับเวลา การติดตั้ง systemd ส่วนใหญ่จะไม่ใช้คุณสมบัติดังกล่าวและไม่มีอะไรผิดปกติในการใช้งานsystemctlcron, systemd timers และทุกสิ่งที่คุณต้องการ ในความเห็นของฉันคำตอบนี้ใช้ได้เช่นเดียวกับคำตอบอื่น ๆ
Pavel Šimerda

คุณอนุญาตให้ตัวอย่างเช่น www-data เรียกใช้ systemctl start & stop ได้อย่างไร
alvaropgl

@alvaropgl ความคิดเห็นของคุณไม่มีส่วนเกี่ยวข้องกับผู้ใช้ (www-data) และการเข้าถึงแบบ จำกัด ที่ผู้ใช้อาจต้องดำเนินการ / ไม่เรียกใช้กระบวนการ (systemctl) ซึ่งเป็นหัวข้อ กรุณาเริ่มหัวข้อใหม่ คำแนะนำ: คุณอาจต้องการมองหาการทำ API เพื่อทำสิ่งที่คุณต้องการมากกว่าแนวทางปัจจุบันของคุณในการเปิดใช้งานขอบเขต + ความรับผิดชอบเพิ่มเติมในผู้ใช้ www-data
Scott Prive

2

มีอีกวิธีหนึ่งในการหยุดบริการหลังจากรันไทม์บางอย่างที่กำหนดค่าไว้ใน.serviceไฟล์

RuntimeMaxSec=...

คุณอาจไม่ชอบความจริงที่ว่าการให้บริการนั้นถือว่าล้มเหลว แต่นั่นเป็นผลที่เกิดขึ้นอย่างมากจากการฆ่าบริการที่ใช้เวลานาน

เพื่อให้ได้คำตอบที่ดีขึ้นคุณอาจต้องการอธิบายเหตุผลของคุณในการใช้คุณสมบัติที่ผิดปกติ โดยทั่วไปแล้วบริการต่างๆจะทำงานตลอดไปหรือจนกว่าจะหยุดให้บริการอย่างชัดเจนไม่ใช่เฉพาะเวลาที่กำหนดไว้เท่านั้น


1
ใช่เราพูดถึงเรื่องนี้และข้อ จำกัด ในรายชื่อผู้รับจดหมาย: lists.freedesktop.org/archives/systemd-devel/2016-April/ ......
Jamie Kitson

1
ไม่ผิดปกติ สิ่งที่เกี่ยวกับการเรียกใช้บริการที่ต้องใช้ทรัพยากรซึ่งอาจเป็น SETI ในเวลากลางคืนเท่านั้นเมื่อเซิร์ฟเวอร์ได้รับปริมาณข้อมูลน้อยที่สุด นอกจากนี้ที่ทำงานฉันยังมี daemon เตือนที่ออกแบบมาเพื่อปลุกทีมสนับสนุนผ่านโทรศัพท์ของพวกเขาเมื่อมีข้อยกเว้นในเซิร์ฟเวอร์ เราไม่ต้องการให้สิ่งที่น่ารำคาญทำงานเมื่อเราตื่นเพราะเซิร์ฟเวอร์เหล่านั้นมีปัญหาด้านซ้ายและขวาระหว่างการใช้งานสูงสุด
James M. Lay
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.