8

Cron のインストールは vixie-cron です

/etc/cron.daily/rmspam.cron

#!/bin/bash
/usr/bin/rm /home/user/Maildir/.SPAM/cur/*;

cronジョブに追加したいこの単純なbashスクリプトがあります(以前のスパム学習コマンドも含まれています)が、この部分は常に「ファイルまたはディレクトリが見つかりません」で失敗しますcron ジョブとして実行します。コマンドラインからスクリプトを実行すると、正常に動作します。

これが機能しない理由と、もちろん機能するソリューションが欲しいです:)

ありがとう

編集#1は、人気のある質問バッジを取得したときに、この質問に戻ってきました。これを最初にやったのは、

#!/bin/bash
find  /home/user/Maildir/.SPAM/cur/ -t file | xargs rm

つい最近、xargsのmanページを読んで、これに変更しました

#!/bin/bash
find  /home/user/Maildir/.SPAM/cur/ -t file | xargs --no-run-if-empty rm

短い xargs オプションは -r

4

5 に答える 5

14

ディレクトリにファイルがない場合、ワイルドカードは展開されず、コマンドに直接渡されます。「*」というファイルがなく、コマンドは「ファイルまたはディレクトリが見つかりません」で失敗します。代わりにこれを試してください:

if [ -f /home/user/Maildir/.SPAM/cur/* ]; then
    rm /home/user/Maildir/.SPAM/cur/*
fi

または、単に "-f" フラグを使用して rm を実行します。このコマンドのもう 1 つの問題は、コマンド ラインの最大長に対してスパムが多すぎる場合に発生することです。このようなものは、おそらく全体的に優れています。

find /home/user/Maildir/.SPAM/cur -type f -exec rm '{}' +

一度に1つのファイルのみを実行するという古い発見がある場合:

find /home/user/Maildir/.SPAM/cur -type f | xargs rm

それはあまりにも多くのファイルを処理するだけでなく、ファイルをまったく処理しません。find の -exec の + オプションを指摘してくれた Charles Duffy に感謝します。

于 2008-10-01T12:38:11.927 に答える
0

追加してみてください

MAILTO=your@email.address

cronファイルの先頭に移動すると、入力/エラーがメールで送信されます。

コマンドをcronジョブとして追加することも検討してください

0 30 * * * /usr/bin/rm /home/user/Maildir/.SPAM/cur/*
于 2008-10-01T12:41:29.607 に答える
0

forceオプションを使用してみて、rmコマンドへのパスを追加することを忘れてください。私はそれが必要ではないと思います...

rm -f

これにより、ディレクトリにファイルがない場合でも、rmコマンドが失敗することはありません。これがシェルスクリプトの一部である場合、*は機能するはずです。あなたは空のディレクトリを持っているかもしれないように私には見えます...

スクリプトの残りの部分が実行されていることを理解していますよね?

于 2008-10-01T12:42:52.163 に答える
0

cronjob でスクリプトへのフル パスを指定していますか?

00 3 * * * /home/me/myscript.sh

それよりも

00 3 * * * myscript.sh

別のメモとして、私がアクセスできるすべての Linux ボックスでは/bin/rmです。マシンの/usr/bin/rmであることを再確認しましたか?

于 2008-10-01T12:33:48.487 に答える
0

rm本当に/usr/bin/システム上にありますか? rmに常駐する必要があると常に考えていました/bin/

于 2011-01-18T12:19:56.670 に答える