- - PR -
findを用いたファイル削除がcronで実行できない
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-08-29 11:12
初めてお世話になります。
RHEL3を利用しています。 AサーバのバックアップをBサーバへftpで転送しています。 Bサーバではcronで古い世代のバックアップファイルを削除する設定に していますが、削除してくれずに困っています。 Bサーバのcronは以下の通りです。 0 6 * * * find /data01/A -name \*.tar.bz2 -mtime +3 -exec rm {} \; オプションを-atimeにしても削除されませんでした。 ただし手動で「find /data01/A -name \*.tar.bz2 -mtime +3 -exec rm {} \;」 打つと、削除されます。 cronでダメで、手動ならOKの理由が分かりません。 どなたかアドバイスいただけますでしょうか。 よろしくお願いします。 ※Bサーバはsmtpサーバも兼ねており、qmailで稼動してます。 cronの結果メールを探しました。qmailでのroot宛の cron結果メールを見つけられませんでした。 ちなみに、Aサーバのバックアップシェルはこんな感じです。 [root@A root]# crontab -l 0 3 * * * /root/ftp_backup3.sh 2>&1 > /dev/null 他省略 [root@A root]# cat ftp_backup3.sh #!/bin/sh # log setting LOGDIR=/var/log LOG=$LOGDIR/ftpbackup.log LOG_TAR=$LOGDIR/ftpbackup_tar.log TAR_FILE=`hostname`_`date +%Y%m%d`.tar.bz2 echo `date` backup start >>$LOG echo `date` backup start >>$LOG_TAR cd /tmp tar -C / -jvcf $TAR_FILE etc home var 2>>$LOG_TAR echo archive finish `date` >>$LOG # ftp and tar backup start ftp -i -v -n Aサーバ << END >>$LOG user hoge passwdhoge cd A bin put $TAR_FILE quit END echo `date` backup complete >>$LOG_TAR echo `date` backup complete >>$LOG rm $TAR_FILE [ メッセージ編集済み 編集者: octpusyo 編集日時 2007-08-29 11:13 ] | ||||
|
投稿日時: 2007-08-29 11:46
はじめして。
原因は、よくわかりませんし、参考になるか不明です。 しかし、まずは調査をしてみては如何でしょうか? find /data01/A -name \*.tar.bz2 -mtime +3 > /tmp/aaa.txt 等で、cronデーモンからの実行時に求めるリストが取得できているかとか。 cron から実行する場合、環境変数等が引き継がれていない場合がありますよね? また、rm コマンド実行時のオプションに「-f」をつけるとか、指定方法がありそうな気がします。 私なら、findにてきちんとリストが取得できていれば、以下コマンドを利用しますよ。 find /data01/A -name \*.tar.bz2 -mtime +3 | xargs rm -f 参考になれば、幸いです。 | ||||
|
投稿日時: 2007-08-29 12:22
コマンド文字列をシェルスクリプトにしたらどうですか?
| ||||
|
投稿日時: 2007-08-29 12:42
cron上から、findへのPATHが見つからないだけでは?
findをフルPATH(/usr/bin/find か)で指定したらどうなりますか? | ||||
|
投稿日時: 2007-08-29 15:27
まずは標準出力と標準エラー出力の内容をファイルに出力して確認してみては?
0 6 * * * find /data01/A -name \*.tar.bz2 -mtime +3 -exec rm {} \; --> 0 6 * * * find /data01/A -name \*.tar.bz2 -mtime +3 -exec rm {} \; > log 2>&1 | ||||
|
投稿日時: 2007-08-31 11:04
みなさまありがとうございます。
とりあえずあんとれさん従ってに 0 6 * * * find /data01/A -name \*.tar.bz2 -mtime +3 -exec rm {} \; >> /var/log/crontemp.log 2>&1 としてみましたが、ログが残りませんでした。 今さっき、直近の未来時間を指定して -mtime +2 -exec rm {} \; >> /var/log/crontemp.log 2>&1 -atime +2 -exec rm {} \; >> /var/log/crontemp.log 2>&1 としてみましたが、これまたログが残りませんでした。 未記入さんに従って find /data01/A -name \*.tar.bz2 -mtime +1 >> /var/log/crontemp.log 2>&1 としてみましたが、これもログが残らずです。 手動で find /data01/A -name \*.tar.bz2 -mtime +1 -exec echo {} \; と打つと、該当するファイルが画面に複数表示されます。 Java僧さんのシェルスクリプト案は来週時間があったら試してみるつもりです。 取り急ぎご報告まで。 | ||||
|
投稿日時: 2007-09-01 00:51
ひょっとして cron のプロセスが止まっている・・・ってことはないですよね^^;
ps で確認してみてください。 また、
みたいな設定を追加して、"test"が出力されるか試してみるとか・・・ | ||||
|
投稿日時: 2007-09-01 10:30
cronのログには実行されたログが残っていますか?
前に私もはまったことがありますが、cron実行のテストを早く終わらせたいからといって、1分後とかの時間でcronを設定すると実行されませんよw |