- PR -

findを用いたファイル削除がcronで実行できない

投稿者投稿内容
octpusyo
常連さん
会議室デビュー日: 2007/08/29
投稿数: 20
投稿日時: 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/28
投稿数: 8
投稿日時: 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

参考になれば、幸いです。
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2007-08-29 12:22
コマンド文字列をシェルスクリプトにしたらどうですか?
非武装エリア
大ベテラン
会議室デビュー日: 2004/03/03
投稿数: 202
お住まい・勤務地: 日本・たこ部屋
投稿日時: 2007-08-29 12:42
cron上から、findへのPATHが見つからないだけでは?
findをフルPATH(/usr/bin/find か)で指定したらどうなりますか?
あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 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
octpusyo
常連さん
会議室デビュー日: 2007/08/29
投稿数: 20
投稿日時: 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僧さんのシェルスクリプト案は来週時間があったら試してみるつもりです。

取り急ぎご報告まで。
Ay
常連さん
会議室デビュー日: 2006/10/29
投稿数: 45
投稿日時: 2007-09-01 00:51
ひょっとして cron のプロセスが止まっている・・・ってことはないですよね^^;
ps で確認してみてください。

また、
コード:
0 6 * * * * echo "test" >> /tmp/test.log


みたいな設定を追加して、"test"が出力されるか試してみるとか・・・
末記人
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 233
お住まい・勤務地: あわにこ
投稿日時: 2007-09-01 10:30
cronのログには実行されたログが残っていますか?

前に私もはまったことがありますが、cron実行のテストを早く終わらせたいからといって、1分後とかの時間でcronを設定すると実行されませんよw

スキルアップ/キャリアアップ(JOB@IT)