Crontab funktioniert nicht (Per Commandline funktioniert´s)

  • Thread starter Thread starter Deleted member 11691
  • Start date Start date
D

Deleted member 11691

Guest
Hallo,

folgendes neues Problem:
Code:
if [ $(uptime | awk -F'load average: ' '{print $2}' | awk -F'.' '{print $1}') == "0" ]; then sync; echo 3 > /proc/sys/vm/drop_caches; echo 0 > /proc/sys/vm/drop_caches; fi
funktioniert per Commandline
In ein Crontab geschrieben
Code:
* * * * * root if [ $(uptime | awk -F'load average: ' '{print $2}' | awk -F'.' '{print $1}') == "0" ]; then sync; echo 3 > /proc/sys/vm/drop_caches; echo 0 > /proc/sys/vm/drop_caches; fi
funktioniert dieser Code nicht (er leert den Cache einfach nicht automatisch. Nur manuell und das nervt :mad:) Was kann das Problem sein? Wie kann ich es lösen?

Ausgabe in der Log:
Code:
Dec  6 15:11:01 46-4-120-47 /USR/SBIN/CRON[15200]: (root) CMD (if [ $(uptime | awk -F'load average: ' '{print $2}' | awk -F'.' '{print $1}') == "0" ]; then sync; echo 3 > /proc/sys/vm/drop_caches; echo 0 > /proc/sys/vm/drop_caches; fi)

L.G. PCFreund
 
Stimmt... Daran habe ich garnicht gedacht..........

$head->table(true);
 
Das kann an der standardmäßig verwendeten Shell liegen. Nicht jede Shell kann die Kommandosubstitution mit $(). Solange nicht klar ist, welche Shell verwendet wird, sollte man für die Kommandosubstitution immer die Backtics verwenden. Ob der Vergleich mit == in einer anderen Shell als der BASH funktioniert, ist mir jetzt auch nicht ganz klar. Im Zweifelsfall immer -gt -lt und -eq (greater than, less than, equal) für die Test-Funktion verwenden.

Anstatt
Code:
* * * * * root if [ $(uptime | awk -F'load average: ' '{print $2}' | awk -F'.' '{print $1}') == "0" ]; then sync; echo 3 > /proc/sys/vm/drop_caches; echo 0 > /proc/sys/vm/drop_caches; fi

solltest du das mal probieren:
Code:
* * * * * root if [ `uptime | awk -F'load average: ' '{print $2}' | awk -F'.' '{print $1}'` -eq "0" ]; then sync; echo 3 > /proc/sys/vm/drop_caches; echo 0 > /proc/sys/vm/drop_caches; fi

Natürlich kannst du dies auch in ein Script auslagern und die bash verwenden. Andererseits kann es soweit ich weiß sogar im Crontab eingestellt werden. Es macht aber auch Sinn als kleine Übung /bin/sh oder /bin/dash bei Debian zu werdenden. Dann sieht man auch ob es mit funktioniert.
 
Natürlich kannst du dies auch in ein Script auslagern und die bash verwenden. Andererseits kann es soweit ich weiß sogar im Crontab eingestellt werden. Es macht aber auch Sinn als kleine Übung /bin/sh oder /bin/dash bei Debian zu werdenden. Dann sieht man auch ob es mit funktioniert.

Das nimm ich mal als guten Tipp von dir :o
 
Jo, hab ich vergessen. Das ist mir auch schon mal passiert. Seit dem arbeite ich nur noch mit absoluten Pfaden zu den Programmen oder nutze halt ein Script. Die Pfade zu den Programmen/Tools deklariere ich in Scripts meistens über Variablen. Das macht es am Ende übersichtlicher. So sieht man auch direkt, was benötigt wird. Nicht jeder hat z.B. lsof auf seinem System installiert.
 
Back
Top