Frage

Cron Installation ist vixie-cron

/etc/cron.daily/rmspam.cron

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

Ich habe diesen einfachen Bash-Skript, das ich einen cron-Job hinzufügen möchte (enthält auch Befehle Spam Lernen vor), aber dieser Teil nicht immer mit „Datei oder Verzeichnis nicht gefunden“ Von dem, was ich meine, die metachar ist nicht wird richtig interperted wenn als cron-Job auszuführen. Wenn ich das Skript von der Kommandozeile ausführen es funktioniert gut.

Ich mag einen Grund für diese nicht funktioniert und natürlich eine Arbeitslösung:)

Danke

bearbeiten # 1 Auf diese Frage kam zurück, als ich es beliebte Frage Abzeichen. Ich habe erste,

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

und erst vor kurzem wurde das Lesen durch die xargs Manpage und verändert es dazu

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

kurze xargs Option ist -r

War es hilfreich?

Lösung

Wenn es keine Dateien im Verzeichnis sind, dann wird der Platzhalter nicht erweitert werden und wird auf den Befehl direkt übergeben werden. Es existiert keine Datei „*“ genannt wird, und dann wird der Befehl nicht mit „Datei oder das Verzeichnis nicht gefunden.“ Versuchen Sie stattdessen:

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

Oder benutzen Sie einfach die "-f" Flag rm. Das andere Problem mit diesem Befehl ist, was passiert, wenn es für die maximale Länge der Befehlszeile zu viel Spam. So etwas ist wahrscheinlich besser Gesamt:

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

Wenn Sie eine alte feststellen, dass nur execs eine Datei zu einem Zeitpunkt rm:

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

Das Griff zu viele Dateien sowie keine Dateien. Dank Charles Duffy für die + Option unter Hinweis darauf, in Fund -exec.

Andere Tipps

Sind Sie den vollständigen Pfad zu dem Skript in den cronjob Angabe?

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

statt

00 3 * * * myscript.sh

Auf einer anderen Anmerkung, es ist / bin / rm auf allen der Linux-Boxen I haben Zugriff zu. Haben Sie doppelt geprüft, dass es wirklich / usr / bin / rm auf Ihrem Rechner?

Versuchen Sie,

MAILTO=your@email.address

Zum Anfang der Cron-Datei und Sie sollten alle Eingabe / Fehler per Post an Sie bekommen.

Beachten Sie auch den Befehl als cronjob Hinzufügen

0 30 * * * /usr/bin/rm /home/user/Maildir/.SPAM/cur/*

Versuchen Sie, eine Kraft-Option und vergessen Sie einen Pfad zu rm Befehl hinzufügen. Ich denke, es sollte nicht nötig sein ...

rm -f

Dadurch wird sichergestellt, dass selbst wenn es keine Dateien im Verzeichnis sind, rm Befehl nicht fehlschlagen. Wenn dies ein Teil eines Shell-Skript ist, sollte die * arbeiten. Es scheint mir, dass Sie vielleicht ein leeres Verzeichnis haben ...

Ich verstehe, dass der Rest des Skripts ausgeführt wird, nicht wahr?

Ist rm wirklich in /usr/bin/ auf Ihrem System? Ich habe immer gedacht, dass rm in /bin/ wohnen sollte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top