367 Stimmen

Wo kann ich Umgebungsvariablen setzen, die crontab verwenden soll?

Ich lasse jede Stunde einen Crontab laufen. Der Benutzer, der sie ausführt, hat Umgebungsvariablen in der Datei .bash_profile die funktionieren, wenn der Benutzer den Job vom Terminal aus ausführt, aber offensichtlich werden diese nicht von crontab übernommen, wenn es läuft.

Ich habe versucht, sie in .profile y .bashrc aber sie scheinen immer noch nicht abgeholt zu werden. Weiß jemand, wo ich Umgebungsvariablen einfügen kann, die von crontab übernommen werden können?

31voto

Robert Brisita Punkte 4604

Eine Erweiterung des Beispiels von @carestad, die ich einfacher finde, besteht darin, das Skript mit cron auszuführen und die Umgebung im Skript zu haben.

In der Datei crontab -e:

SHELL=/bin/bash

*/1 * * * * $HOME/cron_job.sh

In der Datei cron_job.sh:

#!/bin/bash
source $HOME/.bash_profile
some_other_cmd

Jeder Befehl nach der Quelle von .bash_profile wird Ihre Umgebung so haben, als ob Sie sich angemeldet hätten.

20voto

fedorqui Punkte 249453

Was auch immer Sie in crontab werden in den Cronjobs verfügbar sein, sowohl direkt als auch über die Variablen in den Skripten.

Verwenden Sie sie bei der Definition des Cronjobs

Sie können konfigurieren crontab so dass er Variablen setzt, die dann der Cronjob verwenden kann:

$ crontab -l
myvar="hi man"
* * * * * echo "$myvar. date is $(date)" >> /tmp/hello

Jetzt die Datei /tmp/hello zeigt Dinge wie:

$ cat /tmp/hello 
hi man. date is Thu May 12 12:10:01 CEST 2016
hi man. date is Thu May 12 12:11:01 CEST 2016

Verwenden Sie sie in dem von cronjob ausgeführten Skript

Sie können konfigurieren crontab damit es Variablen setzt, die dann von den Skripten verwendet werden können:

$ crontab -l
myvar="hi man"
* * * * * /bin/bash /tmp/myscript.sh

Und sagen Sie Skript /tmp/myscript.sh ist wie folgt:

echo "Now is $(date). myvar=$myvar" >> /tmp/myoutput.res

Sie erzeugt eine Datei /tmp/myoutput.res zeigen:

$ cat /tmp/myoutput.res
Now is Thu May 12 12:07:01 CEST 2016. myvar=hi man
Now is Thu May 12 12:08:01 CEST 2016. myvar=hi man
...

17voto

karlingen Punkte 12760

Bei mir musste ich die Umgebungsvariable für eine php-Anwendung setzen. Ich habe das Problem gelöst, indem ich den folgenden Code zu meiner crontab hinzugefügt habe.

$ sudo  crontab -e

crontab:

ENVIRONMENT_VAR=production

* * * * * /home/deploy/my_app/cron/cron.doSomethingWonderful.php

und in doSomethingWonderful.php konnte ich den Umgebungswert mit erhalten:

<?php     
echo $_SERVER['ENVIRONMENT_VAR']; # => "production"

Ich hoffe, das hilft!

13voto

Ilya Kharlamov Punkte 3413

Anstelle von

0  *  *  *  *  sh /my/script.sh

Verwenden Sie bash -l -c

0  *  *  *  *  bash -l -c 'sh /my/script.sh'

11voto

Hussam Punkte 409

Sie können Ihrem Befehl auch den Zusatz env um Umgebungsvariablen wie folgt zu injizieren:

0 * * * *   env VARIABLE=VALUE /usr/bin/mycommand

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X