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.log
sehe ich
> cat ./restart.log
Using HOST_IP=
Ich verwende die vollständigen Pfade zu den ip
und grep
Befehlen. Daher verstehe ich nicht, warum ich keinen Wert für die Umgebungsvariable erhalte, wenn sie von der Crontab ausgeführt wird.
Antwort1
Ihr @reboot
Cron-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
.