چک وصل بودن اینترنت در فواصل منظم

امین 13 سپتامبر 2023 زمان خواندن: 2 دقیقه

اگه لازم داشته باشیم هر مثلا ۱۵ دقیقه چک بشه آیا به اینترنت وصل هستیم یا خیر، و اگر وصل نبود یک هشدار صوتی به ما بده، میتونیم از اسکریپت زیر استفاده کنیم و اون رو توی cron قرار بدیم تا هر ۱۵ دقیقه اجرا بشه.

اسکریپت زیر برای ما چک میکنه آیا میتونیم به google.com پینگ کنیم یا نه. اگر بله، یک دستوری اجرا بشه (یک صدای کلیک) و اگر نه، یک صدای دیگه پخش بشه و نوتیفیکیشن هم بده. دستورات رو میتونید بنا به نیاز خودتون تغییر بدید.

#!/bin/bash
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
if [[ $(ping -q -c 3 google.com) == @(*3 received*) ]]; then
paplay /usr/share/sounds/freedesktop/stereo/device-added.oga
else
paplay /usr/share/sounds/freedesktop/stereo/dialog-warning.oga  && /usr/bin/notify-send -i "network" "Network is down" "There is no active internet connection now"
fi

توجه کنید که بجای /run/user/1000/bus باید userID خودتون رو قرار بدید. با دستور id میتونید UID خودتون رو ببینید.

برای قرار دادن این اسکریپت در کرون (تا هر ۱۵ دقیقه اجرا بشه)، اول مجوز اجرایی به اسکریپت میدیم (با توجه به محل اسکریپت):

chmod +x ~/pingstat

و بعد برای ویرایش job های کرون، با دستور crontab -e و اضافه کردن زمان و محل اسکریپت، اون رو به امان خدا می سپاریم:

*/15 * * * * ~/pingstat

یک اسکریپت کامل تر در اینجا وجود داره که وقتی ping میکنه اگر در دسترس نباشه یک ایمیل میفرسته! البته در ادامه مطلب این اسکریپت رو هم آوردم

# add ip / hostname separated by white space 
HOSTS="cyberciti.biz theos.in router"
# no ping request
COUNT=1
# email report when
SUBJECT="Ping failed"
EMAILID="me@mydomain.com"
for myHost in $HOSTS
do
count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
if [ $count -eq 0 ]; then
  # 100% failed 
  echo "Host : $myHost is down (ping failed) at $(date)" | mail -s "$SUBJECT" $EMAILID
fi
done

اولین نفری باشید که دیدگاهی ارسال می کند!




حاصل سر و کله زدن های من با لینوکس