ฉันต้องการเริ่มและหยุด systemd.service ในบางช่วงเวลา สันนิษฐานว่าฉันจะใช้หน่วย. timer เพื่อเริ่มงาน แต่มีวิธีที่จะหยุดงานหลังจากระยะเวลาที่กำหนดหรือในเวลาที่กำหนดหรือฉันต้องสร้างหน่วย. timer ตัวที่สองที่ execs stop
?
ขอบคุณ
ฉันต้องการเริ่มและหยุด systemd.service ในบางช่วงเวลา สันนิษฐานว่าฉันจะใช้หน่วย. timer เพื่อเริ่มงาน แต่มีวิธีที่จะหยุดงานหลังจากระยะเวลาที่กำหนดหรือในเวลาที่กำหนดหรือฉันต้องสร้างหน่วย. timer ตัวที่สองที่ execs stop
?
ขอบคุณ
คำตอบ:
หากต้องการหยุดบริการ 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
คุณสามารถใช้งาน 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
systemctl
cron, systemd timers และทุกสิ่งที่คุณต้องการ ในความเห็นของฉันคำตอบนี้ใช้ได้เช่นเดียวกับคำตอบอื่น ๆ
มีอีกวิธีหนึ่งในการหยุดบริการหลังจากรันไทม์บางอย่างที่กำหนดค่าไว้ใน.service
ไฟล์
RuntimeMaxSec=...
คุณอาจไม่ชอบความจริงที่ว่าการให้บริการนั้นถือว่าล้มเหลว แต่นั่นเป็นผลที่เกิดขึ้นอย่างมากจากการฆ่าบริการที่ใช้เวลานาน
เพื่อให้ได้คำตอบที่ดีขึ้นคุณอาจต้องการอธิบายเหตุผลของคุณในการใช้คุณสมบัติที่ผิดปกติ โดยทั่วไปแล้วบริการต่างๆจะทำงานตลอดไปหรือจนกว่าจะหยุดให้บริการอย่างชัดเจนไม่ใช่เฉพาะเวลาที่กำหนดไว้เท่านั้น
.timer
หน่วยsystemd ที่ OP รู้จักอยู่แล้วอย่างไร