検出されたドメイン名の有効期限が切れているかどうかケース10

あなたがサイトをしたい場合は、ドメイン名を使用したい毎年の手数料を支払う必要があるためには、まず、それが借りているとして購入するほどではないが、ドメイン名を購入する必要があります。それが賃貸されているので、時間制限、満期日前にいない更新があるので、ドメイン名が撤回され、他の人が登録したドメイン名を使用することができます。

私たちの時間ドメイン名の多くは、失効し、リサイクルに至るこれらのドメインの更新を忘れがちであるとき。

この場合、需要は次のように特定の要件があり、指定したドメイン名の有効期限が切れる監視するためのシェルスクリプトを記述するかどうかです。

1)この関数のパラメータとして渡された関数、ドメイン名を書きます

ドメイン名は1週間と成熟期限切れになる前と後の2)1週間(2週間)、一日あたりのアラームメッセージを送信する必要があります

一日一回、スクリプトの3)実装


知識ポイント:WHOIS

このよう所有者にメール、電話、住所などのドメイン名の情報、および有効期限が開いているとき、あなたはブラウザでhttps://www.whois.netクエリにアクセスすることができます。同様のサイトの多くは、ドメイン名の情報を照会することができますもあります。どのようにLinuxのコマンドラインそれを確認するには?

#whoisのaminglinux.com 
   ドメイン名:AMINGLINUX.COM 
   レジストリドメインID:1800256822_DOMAIN_COM-VRSN 
   レジストラWHOISサーバ:whois.55hl.com 
   レジストラURL:http://www.55hl.com 
   更新日:2018-05-04T22:57: 37Zの
   作成日:2013-05-10T06:02:05Z 
   レジストリ有効期限:2021-05-10T06:02:05Z 
   レジストラ:江蘇Bangningサイエンス&テクノロジー株式会社
   レジストラIANA ID:1469 
   レジストラ乱用連絡先メールアドレス:虐待の@ 55hl .COM 
   レジストラ乱用連絡先電話番号:+86 025 86883426 1009 
   ドメインステータス:OK https://icann.org/epp#ok 
   ネームサーバ:F1G1NS1.DNSPOD.NET 
   ネームサーバ:F1G1NS2.DNSPOD.NET 
   DNSSEC:符号なし
   https://www.icann.org/wicf/:ICANNのWhois不正確申し立てフォームのURL 
>>> WHOISデータベースの最終更新日:2019-07-25T12:40:54Z <<<

デフォルトのシステムでは、このコマンドを持っている、あなたはwhoisのパッケージをインストールする必要はありません。

この場合は監視時間は、ドメイン名を期限切れに必要なので、ラインは、レジストリ有効期限であるに注意を払うこと。もう一つの問題は、このような.CN結果として、結果が異なっている照会する異なるドメインを(.COM、.CN)を検討しなければならなかった、この次のとおりです。

#aminglinux.cn WHOIS 
ドメイン名:aminglinux.cn 
ROID:20160322s10001s82727381-CN 
ドメインステータス:OK 
登録者のID:mr2272c32qw63z 
登録者:個人名
登録者名刺メール:[email protected] 
スポンサーレジストラ:北京、新しいネットワークのデジタル情報技術有限公司の
名前サーバー:ns11.xincache.com 
ネームサーバ:ns12.xincache.com 
登録時間:2016年3月22日午後05時42分01秒
有効期限:2020年3月22日午後05時42分01秒
DNSSEC:符号なし

だから、.CN有効期限のタイムラインは、懸念の有効期限です。


知識ポイント2:カットコマンド

構文:[-CF] -d「区切り文字」を切断nはn個であります

-d:指定された区切り文字の後に、区切り文字は、単一引用符を使用するには

-c:後ろの最初の数文字を指定します。

-f:後ろの最初の数ブロックを指定します。

#猫/ etc / passwdファイル|カット-d ':' -f 1 |ヘッド-n5 
ルート
ビン
デーモン
ADM 
LP

説明:-d後ろの区切り文字としてコロンを指定し、-f 1が撮影した最初のセグメント、及び任意-f 1との間のスペースを表します。

#ヘッド-n2 / etc / passwdファイル|カット-C2 
O 
I 
#ヘッド-n2 / etc / passwdファイル| -c1カット
R 
bは
#ヘッド-n2 / etc / passwdファイル|カット-c1-10 
ルート:X:0:0 
ビン:X:1:1を
#ヘッド-n2 / etc / passwdファイル|は-c5-10をカットし
ます。x:0:0 
のx:1:1:

説明:-c後部N1-N2であってもよく、またデジタルN1、N2、N3、複数であってもよい、デジタルNであってもよいです。

#ヘッド-n2 / etc / passwdファイル|カット-c1,3,10 
RO0 
BN:


知識ポイント3:プロセス制御

あなたがプロセスを実行すると、停止するには、Ctrl + Zを押して、それを復元するために、FGコマンドを使用し、それがバックグラウンドで実行するために、コマンドBGを使用することができます、また、プロセスプレスCtrl + Cを停止することができます。ジョブコマンドを入力し、あなたは、一時停止またはバックグラウンドで実行中のタスクを見ることができます。

あなたがバックグラウンドで失われたアップ実行するタスクを、一時停止したい場合は、BGコマンドを使用します。

#BGが  
[1] +我々はtest1.txtという&
[1] +私たちはtest1.txtという停止しました

しかし、VIは、コマンドのために、バックグラウンドで他の実行をサポートしていません。

SAR 1#> /tmp/1.log。
^ //ここでZ + ZのCtrlキーを押しながら
[2] + SAR 1停止> /tmp/1.log。 ジョブズ
[1] - [停止VIのtest.txtという
[2] +停止1 SAR> /tmp/1.log 
#BG 2 
[2] + SAR。1>&/tmp/1.log

説明:複数のタスクは、番号を中断ジョブは、二つのタスクを確認するためにコマンドを使用すると、最後に番号を追加する必要がある場合、BGまたはFGを使用して使用されています。実施例で用いたBG 2、バックスロー第懸濁タスクはコマンドを加え、最終的な表面でアンパサンドを使用して、コマンドラインを実行もたらす、これらのコマンドは、直接背景に投入することができます。

シャットダウンバックグラウンドタスクをスローするには?

あなたは、その後、ちょうどシェル前面に最初に使用する「FG番号」タスクを終了し、「CTRLが+ C」タスクの終了使用しない場合:

FG 2#
SAR。1> /tmp/1.log 
^ C //本明細書で使用されるCTRL + C

別の状況は、新しいシェル、ジョブを使用する場合、背景や中断タスクに表示されていないコマンドは、それを止めるために、そして、あなたが知っている必要があり、再び開いて、現在のシェルを遮断、ですそのpidが、そのプロセスを殺すためにkillコマンドを使用します。

#1、SAR 10> /tmp/1.log&
[1] 30218 
#PSがAUX | grepのSARの
ルート30218 0.0 0.0 108036 760のPTS / 0 S 11時22午前0時SAR 1~10 
ルート30221 0.0 0.0 112724 984 PTS / 0 S +午前11時22分午後12時00分のgrep --color =自動SAR

シェルスクリプトでは、それのみ(かかわらず、成功か否か)が実行される命令の最初で、シーケンシャルである複数の命令を実行し、次の命令が実行されます。比較的長い時間を実行するための指示がある場合は、次の手順では、実行の妨げになります。あなたは、命令のこの遅い実行したい場合は、命令が実行される次の命令、プラスの後ろに&、背中にそれを投げるに影響を与えます。背景に投げ込まアンパサンドタスクを使用し、それは情報のPIDを表示し、PIDあなたはこれを忘れてしまった場合、我々はまた、そのプロセスを見つけるコマンドps auxを使用することができます。私は、プロセスを閉じkillコマンドを使用します:

キル9433#1 
[1] +は、sar 1> /tmp/1.log終了しました

killコマンドの構文は、PIDの増加がすることができ、直接後ろに、非常に簡単です。


知識ポイント4:変数が空であるかどうかを判断します

変数が成功した割り当てが引用されたされていない場合、シェルスクリプトでは、それは変数の値は、2つのアプローチを取るとするかどうかを判断するために、スクリプトの正常な実行に影響します。

1)-z(ゼロ意味空)

# b=       //给变量b赋值为空
# if [ -z "$b" ]; then echo "The value of b is null.";else echo "The value of b is $b";fi
The value of b is null.
# b=1
# if [ -z "$b" ]; then echo "The value of b is null.";else echo "The value of b is $b.";fi
The value of b is 1.

2)用-n(not null的意思,不为空)

# a=1
# if [ -n "$a" ]; then echo "The value of a is $a.";else echo "The value of a is null.";fi
The value of a is 1.
# a= 
# if [ -n "$a" ]; then echo "The value of a is $a.";else echo "The value of a is null.";fi
The value of a is null.


知识点五:判断某个进程是否存在

之前有用到过ps查看进程,但是需要结合grep,而且需要统计行数,其实还有一个更简单的用法:

# sleep 100 &
[1]  32744
# pgrep sleep
32744


知识点六:杀死进程

前面有用到kill命令杀死进程,但是需要知道进程的pid。再介绍一个简单的用法:

# sar 1 > /tmp/1.log &
# killall sar
[1]+  已终止     sar 1 > /tmp/sar.log

说明:killall和kill不同的地方在于killall可以直接跟进程名。killall也支持-9选项,有时候用killall杀死进程不好用,需要带上-9,但是进程杀不死时,要慎用-9。


本案例参考脚本

#!/bin/bash
#检测域名是否过期
#作者:
#日期:
#版本:v0.2

[email protected]
#当前日期时间戳,用于和域名的到期时间做比较
t1=`date +%s`

#检测whois命令是否存在,不存在则安装whois包
is_install_whois()
{
    which whois >/dev/null 2>/dev/null
    if [ $? -ne 0 ]
    then
        yum install -y whois
    fi
}

notify()
{
    e_d=`whois $1 |grep 'Expiry Date' |awk '{print $4}' |cut -d 'T' -f 1`
    #上面的$1代表域名,遍历循环出来的。
    #如果e_d的值为空,则过滤关键词'Expiration Time'
    if [ -z "$e_d" ]
    then
        e_d=`whois $1|grep 'Expiration Time' |awk '{print $3}'`
    fi
    #将域名过期的日期转化为时间戳   
    e_t=`date -d "$e_d" +%s`
    #计算一周一共有多少秒
    n=`echo "86400*7" |bc`
    e_t1=$[$e_t-$n] #过期时间一周前的时间戳
    e_t2=$[$e_t+$n] #过期时间一周后的时间戳
    if [ $t1 -ge $e_t1 ] && [ $t1 -lt $e_t ]
    then
        python mail.py $mail_u "Domain $1 will to be expired." "Domain $1 expire date is $e_d."
    fi
    if [ $t1 -ge $e_t ] && [ $t1 -lt $e_t2 ]
    then
        python mail.py $mail_u "Domain $1 has been expired." "Domain $1 expire date is $e_d."
    fi    
}

#检测上次运行的whois查询进程是否存在
#若存在,需要杀死进程,以免影响本次脚本执行
if pgrep whois &>/dev/null
then
    killall -9 whois
fi
    
is_install_whois

for d in aaa.net aaa.com bbb.com aaa.cn ccc.com
do
  notify $d &
done

おすすめ

転載: blog.51cto.com/13576245/2427625