/bin/ip 명령을 사용하여 cronjob에서 보간된 환경 변수가 설정 해제됨

/bin/ip 명령을 사용하여 cronjob에서 보간된 환경 변수가 설정 해제됨

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"

내 사용자의 crontab(루트 crontab 아님)에 다음 항목이 있습니다.

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

직접 명령을 실행하면 다음 출력이 표시됩니다.

> ./startup.sh
Using HOST_IP=192.168.1.15

하지만 머신을 재부팅하고 검사해 restart.log보면

> cat ./restart.log
Using HOST_IP=

ip및 명령 에 대한 전체 경로를 사용하고 있는데 grepcrontab에서 실행할 때 환경 변수에 대한 값을 얻지 못하는 이유를 이해할 수 없습니다.

답변1

@reboot크론 작업이 실행됩니다 .주소가 설정되기 전에

보다 안정적인 접근 방식은 네트워크 구성기의 "포스트업" 후크 메커니즘에서 스크립트를 실행하는 것입니다(예: /etc/NetworkManager/dispatcher.d.

관련 정보