私は、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
実行されません。