특정 시간에 systemd.service를 시작하고 중지하고 싶습니다. 아마도 나는 이것을 시작하기 위해 .timer 단위를 사용할 것이지만,내장된 메소드가 있나요?멈추다특정 기간 동안 또는 특정 시간 이후에 작업아니면 실행하려면 두 번째 .timer 단위를 만들어야 합니까 stop
?
감사해요
답변1
타이머를 사용하여 서비스 A를 중지하려면 oneshot
해당 유형의 서비스 B를 생성하면 됩니다.갈등, 타이머를 사용하여 서비스 B를 시작합니다.
한 유닛이 다른 유닛에 충돌=을 설정한 경우 전자를 시작하면 후자는 중지되고 그 반대의 경우도 마찬가지입니다. (원천)
서비스:
[Unit]
Conflicts=B.service
...
B. 서비스:
[Unit]
Description=B service description
[Service]
Type=oneshot
ExecStart=/bin/echo ''
B. 타이머:
[Timer]
AccuracySec=1
OnActiveSec=10
[Install]
WantedBy=timers.target
다음은 10초 후에 서비스 A를 중지합니다.
systemctl start A.service
systemctl start B.timer
답변2
사용할 수 있는 크론 작업은 여러 가지가 있습니다.
# ┌──────────── 분 (0 - 59) # │ ┌──────────── 시간(0 - 23) # │ │ ┌───────────────일(1~31) # │ │ │ ┌──────────────월(1~12) # │ │ │ │ ┌──────────────── 요일(0 - 6) # │ │ │ │ │ # │ │ │ │ │ * * * * * systemctl start $SERVICE.service * * * * * systemctl stop $SERVICE.service
크론에 대한 추가 정보:https://en.wikipedia.org/wiki/Cron,https://wiki.archlinux.org/index.php/Cron
답변3
실제로 파일에서 특정 런타임을 구성한 후 서비스를 중지하는 또 다른 방법이 있습니다 .service
.
RuntimeMaxSec=...
서비스가 실패한 것으로 간주된다는 사실이 마음에 들지 않을 수도 있지만 이는 장기 실행 서비스를 종료하는 논리적 결과입니다.
더 나은 답변을 얻으려면 이 특이한 기능을 사용하는 이유를 설명하고 싶을 수도 있습니다. 서비스는 일반적으로 고정된 시간 동안이 아니라 영원히 실행되거나 명시적으로 중지될 때까지 실행됩니다.