Interpolierte Umgebungsvariable wird im cronjob mit dem Befehl / bin / ip nicht gesetzt

301
Matt Phillips

Ich habe das folgende Skript im Heimatverzeichnis von myuser

#!/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 den folgenden Eintrag in der crontab meines Benutzers (nicht die 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 die Maschine neu starte und dann inspiziere, restart.logsehe ich

> cat ./restart.log Using HOST_IP= 

Ich verwende den vollständigen Pfad zu den Befehlen ipund grep, also verstehe ich nicht, warum ich für die Umgebungsvariable keinen Wert bekomme, wenn sie von der Crontab ausgeführt wird?

0

1 Antwort auf die Frage

1
grawity

Ihr @rebootCron-Job wird ausgeführt, bevor die Adresse festgelegt ist.

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

Am Ende erstellte ich eine systemd-Unit-Datei zum Ausführen meines Skripts und das funktionierte einwandfrei. Vielen Dank. Matt Phillips vor 6 Jahren 0