crontabが機能しないか、スクリプトエラーがありますか?

crontabが機能しないか、スクリプトエラーがありますか?

動作しないcronjobが付いています。一日放置して新しいアイデアでもう一度解決してみましたが、それでも幸運ではありませんでした。

私はこの大きな質問に対する答えを見つけようとしています。郵便はがきしかし、すべてが私には明確ではなく、最終的にはまだ動作しませんでした。悪いことに、/var/logにはログがなく、cronのエラーもありません。

私は何を達成しようとしていますか?
Webカメラで埋め込まれたディレクトリを自動的に削除します。ディレクトリにはスナップショットがあります。リストの様子です。

pi@raspberrypi:/media/pi/USB/Dahua/Dahua $ ll
total 24K
drwxr-xr-x 3 xxxxxxxx xxxxxxxxx 4.0K Sep  2 05:59 2018-09-02d
drwxr-xr-x 3 xxxxxxxx xxxxxxxxx 4.0K Sep  3 00:57 2018-09-03d
drwxr-xr-x 3 xxxxxxxx xxxxxxxxx 4.0K Sep  4 02:03 2018-09-04d
drwxr-xr-x 3 xxxxxxxx xxxxxxxxx 4.0K Sep  5 01:20 2018-09-05d
drwxr-xr-x 3 xxxxxxxx xxxxxxxxx 4.0K Sep  6 00:20 2018-09-06
-rw-r--r-- 1 xxxxxxxx xxxxxxxxx 4.0K Sep  6 22:28 DVRWorkDirectory

x 個の最新ファイルを保持して残りのファイルを削除したいと思います。これらすべては毎週または毎日特定の時間に実行することができるcronjobによって達成されます。

難しく見えませんが、実行に移すことはできません。実際、私のLinuxの知識は非常に基本的であり、これが私の問題の原因かもしれません。


ステップ1:私のスクリプト、権限、およびファイルの場所。

私の研究では、私はこれら3つのトピックが非常に重要であることを知りました。したがって、これは貴重な情報になります。

-rwxr--r-- 1 root staff 183 Sep  6 15:22 dahuapurge.sh

/usr/local/bin

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
#
#
#Keep the Dahua pics for max x time.
cd /media/pi/USB/Dahua/Dahua/
sudo rm -rf `ls -tl | tail -n +8`

ステップ2:私のcronjobを設定する。

cronjobを生成するためにcrontab -eコマンドを使用しました。ファイルには、私が自分で書いたルールを除くすべての行にコメントがありました。わかりました。今は毎時間実行するように設定しておきました。

# AUTHOR: - xxxx xxxx
# DATE:   - 31/08/2018
# DESCR:  - Purge Cam pics
# LINK: -
#
0 * * * * /usr/local/bin/dahuapurge.sh

修正する:
私のエラーの1つを見つけたかもしれませんが、これはエラーかもしれません。しかし、私の記事はまだ私とは遠いので、とにかく共有します。
ファイル以外のディレクトリを削除しようとしたため、rmコマンドに-rfオプションを追加しました。スクリプトを修正しましたが、約30分後に1つのディレクトリを再度削除する必要があります。

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
#
#
#Keep the Dahua pics for max x time.
cd /media/pi/USB/Dahua/Dahua/
sudo rm -rf `ls -tl | tail -n +7`

修正する:
それでも動作しませんが、公開された提案を試してみて、できるだけ早く更新します。

ベストアンサー1

この順序で確認する必要があるのは次のとおりです。

  1. スクリプトは正確な所有者設定を使用してコマンドラインで非対話式で実行されますか?

    sudo -H -u user -- command
    
  2. crontabエントリの構文は正しいですか?システム全体のcrontabには別の列があります。 cronサービスを再ロードする代わりに再起動してください。/var/log/syslogcrontabにエラーがある場合は、適切なエラーメッセージが表示されます。

     Sep  6 15:56:50 myhost cron[834]: (CRON) STARTUP (fork ok)
     Sep  6 15:56:50 myhost cron[834]: Error: bad command; while reading /etc/crontab
     Sep  6 15:56:50 myhost cron[834]: (*system*) ERROR (Syntax error, this crontab file will be ignored)
    

crontabにはMAILTOEメールアドレスを指す変数が含まれています。これにより、スクリプトをデバッグできます。スクリプトがstdoutまたはstderrに何かを出力するたびに、その内容はこのアドレスにメールで送信されます。これにはMTA(Mail Transfer Agent)が必要です。見るここ


別の点:コマンドの出力を渡すことはlsデザインのアンチパターンです。*.jpg次のように、5日より古いファイルを(非再帰的に)削除します。

find /path -maxdepth 1 -type f -name '*.jpg' -ctime +5 -delete

詳細についてはを参照してくださいman 1 find

おすすめ記事