2017-03-16 1 views
1

Ich versuche, eine Cron-Datei in/etc/croon platziert werden. d. Mein Problem ist, dass ich diese Datei nicht aktualisieren möchte, also suche ich nach einer Möglichkeit, die Softwareversion dynamisch aus einer Datei zu bekommen. Ich habe einige andere Variablen, aber für jetzt denke ich, das Problem ist mit $ (cat /software/VERSION), es funktioniert sehr gut in Shell-Skript, aber nicht auf croon. DieseWie dynamisch gesetzt Variablen auf Cron?

#!/bin/bash 
SHELL=/bin/bash 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 
APPLICATION_ENVIRONMENT=SOME_STRING 
VERSION=$(cat /software/VERSION) 
HOME=/var/www/scripts/$VERSION/cron 
CRON_LOG_DIR=/var/www/scripts/logs 

*/2 * * * * root cd $HOME & php -f $HOME/do_something.php $APPLICATION_ENVIRONMENT >> $CRON_LOG/something.log 

ist die Ausgabe auf cron log:

(root) CMD (cd $HOME & php -f $HOME/do_something.php $APPLICATION_ENVIRONMENT >> $CRON_LOG/something.log) 
(CRON) ERROR chdir failed (/srv/www/tdp/public/$VERSION/backend/cron): No such file or directory 
+1

der Cron könnte ein Shell (oder PHP) Skript aufrufen. es ist kein Ort, um Programmierung zu setzen – nogad

Antwort

2

Cron Tabelle ist nicht ein Shell-Skript! Sie können dort keine Variablen platzieren.

Sie müssen ein Skript von der Cron aufrufen und die Logik dort tun.

Wenn Sie wirklich haben Umgebungsvariablen in cron zu setzen, können Sie es tun, wie diese

*/2 * * * * root SHELL=/bin/bash VARIABLE=something cd $HOME & php -f $HOME/do_something.php $APPLICATION_ENVIRONMENT >> $CRON_LOG/something.log 

Aber es könnte nicht funktionieren, und man könnte einen Fehler machen (Ich bin nicht 100% sicher, dass ich gemacht die Syntax richtig, es ist nicht einfach und es ist nicht notwendig).

Sie sollten Cron so wenig Logik wie möglich hinzufügen.

Außerdem sollten Sie die Cron-Datei nicht direkt bearbeiten; Verwenden Sie stattdessen crontab -e, es wird überprüft, ob Sie die richtige Syntax erstellt haben.

So sollten Sie

*/2 * * * * user /home/user/your-script.sh 

tun und die Variablen in Ihrem Skript gesetzt. (Sie sollten auch keine Programme als root ausführen, wenn es möglich ist.)

+0

Danke! Aber wie kann ich eine /etc/cron.d/myfile mit Crontab -e bearbeiten? – LeonanCarvalho

Verwandte Themen