OpenCVを使用してC言語で書かれたプログラムがあります。 Webカメラから画像をキャプチャし、引数で指定された名前を使用してディスクに保存します。毎分トリガーしたいので、crontabに次の行を挿入します。
* * * * * /home/mustafa/Desktop/capture2/capture2 `date +\%y\%m\%d\%H\%M` >> /home/mustafa/Desktop/webcam.log
コンソールでコマンドを実行すると、コマンドは期待どおりに実行されます。ただし、crontabでは実行されません。
私のcrontab構文に問題がありますか?
編集:これはAngström Linuxです。
答え1
時には、スクリプトのコマンドは、実行中のユーザーのPATH環境変数によって異なります。
このcrontabの先頭にPATH環境変数を追加してみてください。正しいシェルを使用することは問題かもしれません。具体的には、実際の Debian システムでは、標準シェル /bin/sh が /bin/bash ではなく /bin/dash に接続されます。スクリプトで正しいshebangを使用してこの問題を解決したり、crontabプロセスのSHELL env varを変更したりできます。
SHELL=/bin/bash
PATH=<Path Var of The Running user>
man 5 crontab
追加の説明も参照してください。
答え2
特に、このcrontabエントリのエラーロギングを有効にするには、エラーをファイルにリダイレクトできます。
* * * * * /home/mustafa/Desktop/capture2/capture2 `date +\%y\%m\%d\%H\%M` 1>>/home/mustafa/Desktop/webcam.log 2>>/home/mustafa/Desktop/error.log
1>>/home/mustafa/Desktop/webcam.log
スクリプト出力をWebカメラ.logファイルに追加します。
2>>/home/mustafa/Desktop/error.log
スクリプトのエラーを error.log ファイルに追加します。
crontabでスクリプトを実行する前に注意すべき点がいくつかあります。
スクリプトを実行するcrontabエントリを持つユーザーは、スクリプト
execute
ファイルに対する権限を含む、スクリプトで使用されるすべてのファイルにアクセスできる必要があります。ユーザーは、スクリプトが書き込んだり追加したりするファイルに対する権限を持っている必要がありますwrite
。スクリプトファイルのすべてのパスは絶対パスでなければなりません。ファイルパスが保存されるスクリプトの先頭に変数を設定することをお勧めします。
上記の2つのことを確認したら、crontabを使用してスクリプトを実行し、ファイルにerror.log
エラーがあるかどうかを確認してください。発生するエラーに応じてスクリプトを適切に変更できます。