지속적으로 실행되는 애플리케이션에 대한 시스템 서비스를 만드는 방법(시간 창 내에서만)

지속적으로 실행되는 애플리케이션에 대한 시스템 서비스를 만드는 방법(시간 창 내에서만)

기본적으로 카메라 스트림을 지속적으로 분석하고 일부 정보를 서버에 보내는 소프트웨어가 있는데, 이는 헤드리스 시스템(Ubuntu 16.04)입니다. 지원서는 매일 오전 7시 30분에 시작하여 오후 10시에 종료되어야 합니다(일요일 제외). 애플리케이션은 해당 기간 내에 언제든지 실행되어야 하므로 충돌이나 정전이 발생하면 다시 시작해야 합니다(소프트웨어를 호스팅하는 컴퓨터는 정전 후 전원이 켜지도록 설정되어 있음). 시간 창. 현재 저는 이 cronjob을 사용하고 있습니다.

* 7-21 * * 1-6 check-software.sh 
00 22 * * 1-6 killall mysoftware

check-software.sh는 다음과 같습니다:

#!/bin/bash

check_process() {
if ps aux | grep "[m]ysoftware"
then
    return 1
else 
    return 0
fi
}

check_process   
if (test $? -eq 0)
then
    echo mysoftware not running 
    ./mysoftware
else
    echo mysoftware running
fi

잘 작동하지만 cron 대신 systemd 서비스를 사용하고 싶습니다. 그래서 타이머가 있는 서비스를 이런 식으로 사용하려고 합니다.

myservice.service존재하다.config/systemd/user

[Unit]
Description=My Software
StartLimitInterval=0

[Service]
Type=simple
Restart=always
RestartSec=10
WorkingDirectory=/opt/mysoftware
ExecStart=/opt/mysoftware/mysoftware
ExecStartPost=/home/myuser/clear_timer.sh

mytimer.timer존재하다.config/systemd/user

[Unit]
Description=Run my software

[Timer]
OnCalendar=Mon-Sat 07:29:00
Persistent=true

[Install]
WantedBy=timers.target

clear_timer.sh이것은:

#!/bin/bash

rm ~/.local/share/systemd/timers/*
export XDG_RUNTIME_DIR=/run/user/1000
systemctl --user restart mytimer.timer

제가 보기에는 Clear_timer가 타이머의 마지막 실행을 제거하여 전원이 꺼졌을 때 7시 30분이 지나면 타이머가 이전에 실행된 적이 없다는 것을 깨닫고 실행되도록 하여 이 문제를 해결해야 하는 것 같습니다. 그러나 이것은 작동하지 않습니다! 7시 30분 이후에 정전이 발생하면 소프트웨어가 시작되지 않습니다. 그렇지 않으면 이 방법은 예상대로 작동합니다(그러나 오후 10시에 소프트웨어를 중지하려면 항상 cronjob이 필요합니다). 어떤 아이디어가 있나요?

관련 정보