저는 DHCP를 통해 공용 IP 주소를 발급하는 주거용 ISP를 통해 집에서 서버를 호스팅합니다. 이는 DCHP 임대가 갱신될 때 항상 동일한 IP를 얻지는 않는다는 것을 의미합니다. 내 공용 IP가 변경되었는지 확인하고 변경된 경우 새 IP 주소를 이메일로 보내기 위해 bash 스크립트를 만들었습니다. "현재" IP는 누구나 읽고 쓸 수 있는 내 홈 디렉터리의 텍스트 파일에 저장됩니다. 매시간 실행하고 싶지만 cron을 실행할 수 없는 것 같습니다.어느나에게 취업 기회를 주세요. 스크립트는 문제 없이 실행됩니다.
이전 질문을 살펴본 결과 파일 권한이나 출력 처리 문제가 있는 것 같지 않습니다. 파일/작업은 /var/log/syslog에 나타나지 않습니다.
아이디어?
버전 관리
시스템 세부정보( uname -a
):Linux jasonbourne 5.10.0-19-amd64 #1 SMP Debian 5.10.149-2 (2022-10-21) x86_64 GNU/Linux
크론 세부정보( apt info cron
):Version: 3.0pl1-137
배쉬 세부정보( apt info bash
):Version: 5.1-2+deb11u1
배시 스크립트:
#!/bin/bash
#known (current) IP
current_ip=`cat /home/jasonbourne/.current_ip`
#check for actual IP
check_ip=`dig -4 +short myip.opendns.com @resolver1.opendns.com`
if [ $check_ip != $current_ip ]
then
message="`hostname`'s IP address changed from $current_ip to $check_ip on `date +%D` at `date +%T`"
email="[email protected]"
subject="`hostname` IP address change!"
echo $message | mail -r $email -s "$subject" $email
echo $check_ip > /home/jasonbourne/.current_ip
fi
스크립트와 현재 IP에는 적절한 권한이 있습니다.
jasonbourne@debian:~$ ls -la /usr/bin/public-ip-monitor.sh
-rwxr-xr-x 1 root root 873 Dec 28 20:14 /usr/bin/public-ip-monitor.sh
jasonbourne@debian:~$ ls -la /home/jasonbourne/.current_ip
-rw-rw-rw- 1 jasonbourne jasonbourne 15 Dec 28 21:28 /home/jasonbourne/.current_ip
crontab 및 cron.time을 시도해 보십시오:
cron 서비스가 정상적으로 실행됩니다.
jasonbourne@debian:~$ sudo systemctl status cron
● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2022-12-28 00:32:37 EST; 21h ago
Docs: man:cron(8)
Main PID: 14242 (cron)
Tasks: 1 (limit: 4583)
Memory: 1.0M
CPU: 3.949s
CGroup: /system.slice/cron.service
└─14242 /usr/sbin/cron -f
내 사용자 crontab을 로 설정하고 시도 crontab -e
했습니다 . 스크립트도 넣었습니다 .0 * * * * /usr/bin/public-ip-monitor.sh
@hourly /usr/bin/public-ip-monitor.sh
/etc/cron.hourly
답변1
/etc/cron.hourly/public-ip-monitor.sh
작동하지 않는 이유는 시간별 cron 항목이 run-parts
/etc/crontab 파일을 통해 시작되기 때문입니다.
01 * * * * root cd / && run-parts --report /etc/cron.hourly
구성 요소 실행실행에 대한 특정 규칙이 있습니다.
run-parts는 디렉토리 디렉토리에 있는 아래 설명된 제약 조건 내에서 명명된 모든 실행 파일을 실행합니다.
--lsbsysinit 옵션 및 --regex 옵션이 지정되지 않은 경우 이름은 ASCII 대문자 및 소문자, ASCII 숫자, ASCII 밑줄 및 ASCII 빼기 하이픈으로 구성되어야 합니다.
따라서 확장명을 가진 파일은 .sh
실행되지 않습니다.