起動後すぐにアプリケーションを実行する方法を探しています。このアプリケーションは1時間後にタイムアウトします。初期起動から1時間(初期アプリケーションタイムアウト後)にアプリケーションの他のインスタンスを起動したいと思います。私はCronがこのタスクを実行するように(賢く)設定できると思いました。起動時にシステムクロックを00:00:00にリセットし、Cronを正常に実行する以外に他の方法はありますか?よろしくお願いします。
修正する:maulinlawnの提案に従ってSystemd.serviceアプローチを使用しました。特に、/usr/bin/startVideo/startVideo.pyにPythonスクリプトのコピーを配置しました。次に、/lib/systemd/service/startVideo.service にサービスファイルを作成します。このファイルは、
[Unit]
Description=starts video recorder
[Service]
Type=simple
ExecStart=/usr/local/bin/startVideo/startVideo.py
Restart=always
[Install]
WantedBy=multi-user.target
やっぱり逃げて、
sudo systemctl enable startVideo.service
登録サービス。モニターやキーボードが接続されていない状態で、カメラに接続されたRaspberry Pi3で動作します。私は年中無休の24時間ビデオを録画することができ、電源が切れたら自分で再起動できるシステムを探しています。他の提案?このタイプのアプリケーションに対して「WantedBy」が正しく設定されていますか?
Crowellのこのソリューションとガイドラインに感謝します。
答え1
あなたの説明に基づいてsystemd
(私のすべてのコンピュータにこれがあるので)ファイルを使って.service
アプリケーションを起動します。。
サービスファイルから単純なwhileループでアプリケーションをラップするスクリプトを指します。このような:
#!/bin/sh
while true; do
/path/to/your/application
done
これにより、アプリケーションがシャットダウン(「タイムアウト」)されるたびにループの条件が常に真であるため、それ自体が再起動されます。
これは1つの方法であり、私が考えることができる最も簡単な方法です。他の方法もあるかもしれません!
答え2
systemdが好きではない人にとっては、/var/runのpidfileを使って/etc/rc.local(例えばDebian)のプログラム(シェルラッパー)を呼び出すのが良い選択です。このようなことwhile true ; do $_cmd >/dev/null 2>&1 & sleep 3600 ; pkill $( cat /var/run/pgm.pid ) ; rm /var/run/pgm.pid ; done
- デーモンが独自のPIDを作成できると仮定します。それ以外の場合は、子プロセスではなく親プロセスにのみシグナルを送信するためにいくつかのps text-fuが必要です。のみPS。