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
및 명령 에 대한 전체 경로를 사용하고 있는데 grep
crontab에서 실행할 때 환경 변수에 대한 값을 얻지 못하는 이유를 이해할 수 없습니다.
답변1
@reboot
크론 작업이 실행됩니다 .주소가 설정되기 전에
보다 안정적인 접근 방식은 네트워크 구성기의 "포스트업" 후크 메커니즘에서 스크립트를 실행하는 것입니다(예: /etc/NetworkManager/dispatcher.d
.