crontab kann Umgebungsvariable auch nach der Beschaffung von .bashrc nicht finden

crontab kann Umgebungsvariable auch nach der Beschaffung von .bashrc nicht finden
crontab -e
00 00 * * * /home/username/run.sh >> /home/username/log 2>&1

In run.sh:

source /home/username/.bashrc
java

Beim Auslösen des Crontab-Jobs wird dieser Fehler im Protokoll angezeigt:

/home/username/run.sh: 1: /home/username/run.sh: java: not found

Der Java-Pfad ist jedoch in /home/username/.bashrc festgelegt, daher hatte ich erwartet, dass Sourcing den Java-Pfad festlegen sollte:

Ich weiß, dass ich das Problem folgendermaßen beheben kann:

export PATH="/usr/local/jdk1.8.0_231/bin:$PATH"
java

Aber warum reicht es nicht aus, .bashrc als Quelle zu verwenden? Welche Umgebungsvariablen hat crontab genau und was macht die Quelle .bashrc genau (so dass crontab sie nicht berücksichtigt)?

Danke.

Antwort1

Ich habe einige Vermutungen, aber vielleicht liege ich falsch:

  • Wenn wir eine Bash-Shell öffnen, starten wir einen Bash-Prozess, und wenn wir .bashrc ausführen, werden nur Änderungen an der Umgebung dieses Bash-Prozesses vorgenommen
  • crontab hat einen eigenen Prozess, der keine Beziehung zum geöffneten Bash-Prozess hat
  • beim Abrufen von .bashrc werden nur Änderungen am Bash-Prozess vorgenommen (obwohl beim Ausführen von Crontab keine vorgenommen werden??), daher hat Crontab immer noch keine Änderungen an der Umgebungsvariable

Daher hilft das Herstellen einer .bashrc-Quelle für Crontab nicht.

verwandte Informationen