Interpolierte Umgebungsvariable im Cronjob mit dem Befehl /bin/ip aufgehoben

Interpolierte Umgebungsvariable im Cronjob mit dem Befehl /bin/ip aufgehoben

Ich habe das folgende Skript im Home-Verzeichnis meines Benutzers

#!/bin/bash
# startup.sh
export HOST_IP=$(/bin/ip -4 addr show enp2s0 | /bin/grep -Po 'inet \K[\d.]+')
echo "Using HOST_IP=$HOST_IP"

und der folgende Eintrag in der Crontab meines Benutzers (nicht in der Root-Crontab)

@reboot /home/myuser/startup.sh > /home/myuser/restart.log 2>&1

Wenn ich den Befehl selbst ausführe, sehe ich die folgende Ausgabe

> ./startup.sh
Using HOST_IP=192.168.1.15

Aber wenn ich den Rechner neu starte und dann überprüfe, restart.logsehe ich

> cat ./restart.log
Using HOST_IP=

Ich verwende die vollständigen Pfade zu den ipund grepBefehlen. Daher verstehe ich nicht, warum ich keinen Wert für die Umgebungsvariable erhalte, wenn sie von der Crontab ausgeführt wird.

Antwort1

Ihr @rebootCron-Job läuftbevor die Adresse eingestellt wird.

Ein zuverlässigerer Ansatz wäre, das Skript über den „Post-up“-Hook-Mechanismus Ihres Netzwerkkonfigurators auszuführen, z. B. über /etc/NetworkManager/dispatcher.d.

verwandte Informationen