Bash-Skript läuft von Shell, aber nicht von Cron-Job

8

Cron-Installation ist vixie-cron

/etc/cron.daily/rmspam.cron

%Vor%

Ich habe dieses simple Bash-Skript, das ich zu einem Cron-Job hinzufügen möchte (enthält auch Spam-Lernbefehle), aber dieser Teil schlägt immer mit "Datei oder Verzeichnis nicht gefunden" fehl. Von dem, was ich sehe, ist der Metachar nicht richtig interperted, wenn als Cron-Job ausgeführt. Wenn ich das Skript über die Befehlszeile ausführe, funktioniert es einwandfrei.

Ich möchte ein warum dafür nicht arbeiten und natürlich eine funktionierende Lösung:)

Danke

Bearbeiten # 1 kam zu dieser Frage zurück, als ich populäres Fragezeichen dafür bekam. Ich habe das zuerst gemacht,

%Vor%

und erst kürzlich habe ich die Manpage von xargs durchgelesen und zu diesem geändert

%Vor%

kurze xargs Option ist -r

    
Tanj 01.10.2008, 12:32
quelle

5 Antworten

14

Wenn sich keine Dateien im Verzeichnis befinden, wird das Platzhalterzeichen nicht erweitert und direkt an den Befehl übergeben. Es gibt keine Datei namens "*", und der Befehl schlägt fehl mit "Datei oder Verzeichnis nicht gefunden". Versuchen Sie es stattdessen:

%Vor%

Oder verwenden Sie einfach den "-f" -Flag für rm. Das andere Problem mit diesem Befehl tritt auf, wenn zu viel Spam für die maximale Länge der Befehlszeile vorhanden ist. So etwas ist wahrscheinlich insgesamt besser:

%Vor%

Wenn Sie einen alten Fund haben, der nur eine Datei gleichzeitig ausführt:

%Vor%

Das behandelt zu viele Dateien sowie keine Dateien. Danke an Charles Duffy, dass er die + Option auf -exec in find hingewiesen hat.

    
janm 01.10.2008, 12:38
quelle
0

Geben Sie den vollständigen Pfad zum Skript im Cronjob an?

%Vor%

statt

%Vor%

Bei einer anderen Anmerkung ist es / bin / rm auf allen Linux-Boxen, auf die ich Zugriff habe. Haben Sie überprüft, dass es wirklich / usr / bin / rm auf Ihrem Computer ist?

    
Mark Biek 01.10.2008 12:33
quelle
0

versuche,

hinzuzufügen %Vor%

an den Anfang Ihrer Cron-Datei und Sie sollten alle Eingaben / Fehler erhalten, die an Sie gesendet werden.

Ziehen Sie auch in Erwägung, den Befehl als Cronjob hinzuzufügen

%Vor%     
Ken 01.10.2008 12:41
quelle
0

Versuchen Sie es mit einer force-Option und vergessen Sie nicht, einen Pfad zum rm-Befehl hinzuzufügen. Ich denke, es sollte nicht gebraucht werden ...

%Vor%

Dadurch wird sichergestellt, dass der Befehl rm auch dann fehlschlägt, wenn sich keine Dateien im Verzeichnis befinden. Wenn dies ein Teil eines Shell-Skripts ist, sollte das * funktionieren. Es sieht für mich so aus, als hättest du ein leeres Verzeichnis ...

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

    
bcelary 01.10.2008 12:42
quelle
0

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

    
ulidtko 18.01.2011 12:19
quelle

Tags und Links