crontabが実行されていません

crontabが実行されていません

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エラーがあるかどうかを確認してください。発生するエラーに応じてスクリプトを適切に変更できます。

答え3

提案通りガロンそしてつかむ存在するこのスレッド、crontabの最後に新しい行を追加してみてください。明らかに、いくつかのcron実装は、crontabの最後の改行以降に何も得られません。 RedHat 6システムでこの問題が発生したばかりで、すべてのタスクが期待どおりに実行されるようになりました。

関連情報