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