2017-02-19 1 views
0

Ich habe folgende Bash-Skript:Ausgang nicht Datei gehen, wenn sie als Cron-Job lief

clean-tmp.sh

#!/bin/bash 
tmpreaper 1h /tmp --test > ./tmpreaper.log 

Als ich es im Terminal laufen ./clean-tmp.sh verwenden, ist es schreibt in die Datei ./tmpreaper.log.

habe ich das Skript in die Liste der Cron-Jobs crontab -e mit:

*/5 * * * * cd /home/cron-jobs && ./clean-tmp.sh 

ich dann cron die Protokolle geprüft und ist der Eintrag dort alle 5 Minuten:

Feb 19 00:45:01 ip-172-31-23-184 CRON[1475]: (ubuntu) CMD (cd /home/cron-jobs && ./clean-tmp.sh) 

Aber es ist nicht mehr Schreiben an ./tmpreaper.log.

Was um alles in der Welt mache ich falsch?

+0

Sind Sie sicher, dass die 'cd' erfolgreich ist? Dies ist ein Ort, an dem exec 2 >>/tmp/err.log; Satz -x; cd/home/cron-jobs &&./clean- tmp.sh' wäre nützlich (oder sogar 'bash -x./clean-tmp.sh'). –

+0

Das Schreiben in eine Datei unter Verwendung des relativen Pfads ist keine große Programmierpraxis. Im Allgemeinen ist es nicht gut, wenn ein Skript davon ausgeht, dass das aktuelle Arbeitsverzeichnis korrekt eingestellt ist. Vielleicht möchten Sie einen Blick auf diesen Beitrag werfen: http://stackoverflow.com/questions/41755437/managing-log-file-created-by-cron-jobs – codeforester

+1

BTW, die übliche Ursache für diese Art von Problem ist 'tmpreaper 'nicht in Cron's PATH. Wenn es zum Beispiel in '/ usr/local/bin' ist, ist das nicht standardmäßig vorhanden. –

Antwort

0

nur einen absoluten Pfad für die Datei angeben, wie tmpreaper 1h /tmp --test > /var/log/tmpreaper.log

+0

Wenn das 'cd' erfolgreich war, dann kennen wir das aktuelle Arbeitsverzeichnis mit Sicherheit. Wenn es kein anderes Skript namens 'clean-tmp.sh' irgendwo anders gibt, dann kann' .' möglicherweise nichts anderes als '/ home/cron-jobs' sein, wenn'./Clean-tmp.sh' erfolgreich aufgerufen wird. –

+0

... und wenn es * nicht * erfolgreich aufgerufen wird, dann behebt dies nichts. –

0

@Kacy: Wenig schwierig, ohne cron-Protokolle zu sagen, Sie einen Blick Logs cron (/ var/log/cron etc) haben könnte.

0,5,10,15,20,25,30,35,40,45,50,55 * * * * cd /home/cron-jobs; ./clean-tmp.sh 

können einige Systeme nicht Zeit wie die Art und Weise Sie versucht, versuchen Sie einmal in oben Weise lassen und uns dann wissen lassen.

+1

Wenn '*/5' nicht gültig waren, dann hätte' crontab -e' die Bearbeitung abgelehnt. Außerdem macht die Frage deutlich, dass dies so protokolliert wird, wie es alle 5 Minuten aufgerufen wird. –

+0

@CharlesDuffy: Vielen Dank für Ihre Antwort, ich sage nicht, es ist nicht gültig, ich habe Systeme gesehen, wo es mit Crontab -e speichern kann, aber es funktioniert nicht, so dass ich nur vorgeschlagen, wenn Benutzer einmal versuchen könnte. – RavinderSingh13

+1

Wie das OP in der Frage angegeben, sagen ihre Syslogs, dass Cron den Befehl tatsächlich alle 5 Minuten ausführt. –