継続的に実行されているアプリケーションのシステムサービスを作成する方法(時間枠内のみ)

継続的に実行されているアプリケーションのシステムサービスを作成する方法(時間枠内のみ)

デフォルトでは、カメラストリームを継続的に分析し、いくつかの情報をサーバーに送信するソフトウェアがあります。これはヘッドレスシステム(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が必要です)。どんなアイデアがありますか?

関連情報