私は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
削除したいファイルの名前が出力されます(それ以外の場合は自動的に実行されます)。
答え2
chmod
実行ビットを設定するには、コマンドを使用してください。
chmod ugo+x auto_delete_backup_database.sh