cronによって実行されないbashスクリプト

cronによって実行されないbashスクリプト

私がするときに完全に実行される非常に単純なbashスクリプトがあります。

./removeOldBackup.sh

または

sh /home/myusername/backup/removeOldBackup.sh

しかし、crontabに追加すると

* * * * * sh /home/myusername/backup/removeOldBackup.sh

または

* * * * * /bin/sh /home/myusername/backup/removeOldBackup.sh

決して動作しません...

これは私のスクリプトです。

#!/bin/sh

find . -name 'files_20[1-3][0-9]-[0-9][0-9]-[1-2][1-9]--*' -delete
find . -name 'files_20[1-3][0-9]-[0-9][0-9]-0[2-9]--*' -delete

find . -name 'database_20[1-3][0-9]-[0-9][0-9]-[1-2][1-9]--*' -delete
find . -name 'database_20[1-3][0-9]-[0-9][0-9]-0[2-9]--*' -delete

私のスクリプト権限は次のとおりです。

-rwxr-xr-x 1 root root 295 Jul 25 10:07 /home/myusername/backup/removeOldBackup.sh

rootユーザー用のcrontabが追加されました。

これが私が見つけたものです/var/log/syslog

Jul 25 10:11:01 myservername /USR/SBIN/CRON[7583]: (root) CMD (sh /home/myusername/backup/removeOldBackup.sh)

したがって、スクリプトを手動で実行すると、バックアップファイルが正しく削除されます。 cronで実行すると削除されません。私はdebian-6.0-x86_64を使用しています。

答え1

誰かがコメントで言った内容を定式化して拡張するためにルートのcrontabに何かを入れると、スクリプトがあるディレクトリでは/rootなく内部的に実行されます。cron場所もわからないからです。バックアップファイルがそのディレクトリツリーにないため、findコマンドはそのファイルに到達しません。したがって、ジョブは実行中ですが、削除するファイルが見つかりません。絶対パスを指定するfindか、最初に追加するとcd /home/myusername/backup問題が解決します。

それにもかかわらず、このcronjobをrootとして実行する必要はまったくないようです。すべてのファイルはmyusernameのホームディレクトリにあり、おそらくそのファイルの所有者かもしれません。 cronjobをユーザーのcrontabに入れるのはどうですか?ルートバージョンで使用されているcrontab -eのとmyusername同じ行を実行して追加します。これにより、権限のあるユーザーでジョブを実行する必要がなくなり(ファイルも自動的に削除されます)、スクリプトが開始されたジョブの場所に配置されます。

関連情報