cronjobを介してファイルを保存したファイルを削除することはできません。

cronjobを介してファイルを保存したファイルを削除することはできません。

私はcrontabを使ってすべてのMySQLデータベースを別々のgnu-zipファイルにバックアップしています。 1日を過ぎたバックアップファイルも削除したいと思います。

次のコマンドを使用して古いファイルを削除していますが、端末を介してのみ機能します。同じコマンドにcronjobを設定すると機能しません。私は何が間違っているのかわかりません。私のコマンドによると、次のようになります。

find path -type f -mtime +0 -delete

また、cronjobを設定するとエラーが見つかりません。

0 0 * * * /path/auto_delete_backup_database.sh >/path/auto_delete_backup_database.log

どんな助けでも大変感謝します。

修正する

@Kusalanandaが述べたように、実行ls -l結果は以下のスクリーンショットに表示されます。

ここに画像の説明を入力してください。

それでは、.shファイルに実行に必要な権限がないためですか?では、その権限をどのように付与しますか?

ベストアンサー1

ご質問に記載されている内容に基づいてコメントで言った、あなたのスクリプトはいいえ-lineのない実行可能ファイルです#!

少なくともスクリプトを実行可能にする必要があります。

chmod +x /path/auto_delete_backup_database.sh

そして適切な行を入力してください#!

#!/bin/sh

(前にスペースがないスクリプトの最初の行でなければなりません。)

スクリプトが実行可能でない場合は、スクリプトとしてまったく使用できません。これらのファイルを実行しようとすると、「許可拒否」エラーが返されます(クローンデーモンがこのことを知らせるために電子メールを送信した可能性があります)。

-line がない場合、#!呼び出しシェルにスクリプトの実行に使用するシェルソルバーを通知します。時によって異なります。どのシェルから呼び出されるとどうなりますか?#!スクリプトの先頭には常に適切な行が必要です。この場合はbash特別な機能を使用しないので/bin/sh

find明らかに、cronを使用してコマンドを直接スケジュールすることもできます。

0 0 * * * find path -type f -mtime +0 -print -delete >/path/auto_delete_backup_database.log 2>&1

私はこれが単一のコマンドcron操作に適していると思います。よりエキゾチックなのは、ラッパースクリプトの一部として配置するのが最善です。

-print上記のコマンドに追加すると、find削除したいファイルの名前が出力されます(それ以外の場合は自動的に実行されます)。

おすすめ記事