[python] 인터넷 연결 안되있으면 컴퓨터 다시 시작하는 프로그램
프로젝트/[ing]_백테스팅_툴

[python] 인터넷 연결 안되있으면 컴퓨터 다시 시작하는 프로그램

728x90
반응형

얼마전 와이파이론 도저히 느린 인터넷이 너무 답답했습니다. 그래서 기사님께 문의하여 제 컴퓨터 근처에 유선인터넷을 달아달라 했죠. 유선인터넷 설치는 별탈없이 완료 되었습니다. 이제 빠른 인터넷을 쓸 수 있겠구나 하던 기쁨도 잠시,
이게 웬걸,, 인터넷 연결이 안되네요 ㅠㅠ 문제해결을 눌러보니 네트워킹 초기화...

구글링을 해도 명쾌한 답변이 없습니다 ㅠ
이것 저것 알아보다, 네트워킹 초기화를 안하고도 단순하게 컴퓨터를 다시시작하면 인터넷이 연결되는 현상을 확인할 수 있었습니다. ...??? 이게 왜 이러는건지 참..

 

 

 

 

 

 

1. 개요

디테일한 원인은 잠시 제쳐두고, 이번엔 단순하게

'컴퓨터의 인터넷이 연결이 안된게 확인되면 1번 다시시작하는' 프로그램을 만들어볼 생각입니다.
그렇지 않으면 제 슬랙봇이 일을 못하니까요..
(** 슬랙봇이 궁금하시다면 아래의 링크 참고해주세요 ~ ↓ )
2021.10.13 - [프로젝트/[ed]_슬랙봇_증시알림] - [Python] 슬랙(Slack) 알림봇 설정하여 매일 증시 알림 받기 - fin

2. 작동 순서 및 주변 정보

개략적인 로직은 아래와 같습니다.

0. 컴퓨터를 켜면 프로그램이 시작된다.
1. 인터넷 연결을 확인한다.
2. 연결이 안되어 있다면 3분뒤 다시 시작한다.
4. 컴퓨터 재시작 후, 연결을 재확인 한다.
이번엔 인터넷 연결과 상관없이 컴퓨터 재시작은 하지 않는다.

** 컴퓨터 처음 켜고 다시시작없이 바로 컴퓨터를 끄면 GG...

 

인터넷 연결 유무를 확인할 수 있는 정보로는, 
인터넷 연결이 안되는 경우 윈도우 명령창에 아무것도 뜨지 않고, 파이썬으로 체크시 '127.0.0.1' 이 뜹니다.

 

 

인터넷 연결이 되는 경우, 커맨드 창에 인터넷 연결 정보가 뜨며,
파이썬 체크시 개인 ip 주소가 뜹니다.

 

 

 

3. 폴더구조 및 코드

폴더 구조는 아래 그림과 같습니다.

 

configs 폴더의 data.txt 는 단순하게 0 아니면 1만 적혀있는 파일입니다.

 

2. 에서 알아본 정보를 활용하여 인터넷 연결 확인 함수를 만듭니다.

socket 모듈 하나로 간단하게 확인 가능합니다.

 

# internet_check.py

import socket

def internetCheck():
    '''
    인터넷 연결을 확인한다. \n
    연결이 안되어 있다면 127.0.0.1 을 리턴한다.
    '''
    ipAddress = socket.gethostbyname(socket.gethostname())
    return ipAddress


main 문 입니다.
프로그램의 동작 상황을 알리기 위해 내장모듈인 tkinter 를 추가하여 초기 인터넷 미연결시 재시작 문구를 GUI 형태로 표시 해주었습니다.

# computer_autoRestart.py

import sys
sys.path.append('C:\Projects\Slack_notice\src')
from Slacker_notice_functions import * # 슬랙 봇 활용 함수 import
import os
from internet_check import *
from tkinter.messagebox import * # 내장 GUI 툴킷


# 인터넷 연결을 확인한다.
ipCheck = internetCheck()

if ipCheck == "127.0.0.1": # 인터넷 연결이 안되있는 경우,
    with open('C:\Projects\computer_autoRestart\configs\data.txt', 'r') as f: # 데이터 파일을 연다.
        cnt_restart = f.readline() # 0이면 다시시작. 1이면 다시시작 안함.
    
    if cnt_restart == '0': # 다시시작 한적이 없고 인터넷 연결도 안되었을 경우. 다시시작을 한다.
        with open('C:\Projects\computer_autoRestart\configs\data.txt', 'w') as f:
            f.write("1") # 1로 만들어서 다시시작을 안하게 한다.
        
        os.system('shutdown -r -t 180') # 3분뒤 다시시작 한다.
        showerror("인터넷 연결 안됨", "인터넷 미연결 상태입니다.\n 3분후 재시작 합니다.")

    
else: # 인터넷 연결이 되어있는 경우
    with open('C:\Projects\computer_autoRestart\configs\data.txt', 'w') as f:
        f.write("0") # 0을 적는다. 연결이 안되면 다시시작 상태로 돌아갈 수 있게끔.

    Token = 'xoxb-' # 자신의 Token 입력
    notice_text(Token, '#컴퓨터-알림', '인터넷이 연결되었습니다.')

 

만약 슬랙봇 콜 하는 함수가 없다면 위의 코드에서 맨 위의 세 줄을 지우고, 맨 아래에 notice_text 함수를 직접 정의합니다. 그렇게 되면 아래 같은 코드가 되겠습니다.

 

# computer_autoRestart.py

import os
from internet_check import *
from tkinter.messagebox import * # 내장 GUI 툴킷

# 인터넷 연결을 확인한다.
ipCheck = internetCheck()

if ipCheck == "127.0.0.1": # 인터넷 연결이 안되있는 경우,
    with open('C:\Projects\computer_autoRestart\configs\data.txt', 'r') as f: # 데이터 파일을 연다.
        cnt_restart = f.readline() # 0이면 다시시작. 1이면 다시시작 안함.
    
    if cnt_restart == '0': # 다시시작 한적이 없고 인터넷 연결도 안되었을 경우. 다시시작을 한다.
        with open('C:\Projects\computer_autoRestart\configs\data.txt', 'w') as f:
            f.write("1") # 1로 만들어서 다시시작을 안하게 한다.
        
        os.system('shutdown -r -t 180') # 3분뒤 다시시작 한다.
        showerror("인터넷 연결 안됨", "인터넷 미연결 상태입니다.\n 3분후 재시작 합니다.")

    
else: # 인터넷 연결이 되어있는 경우
    with open('C:\Projects\computer_autoRestart\configs\data.txt', 'w') as f:
        f.write("0") # 0을 적는다. 연결이 안되면 다시시작 상태로 돌아갈 수 있게끔.

    Token = 'xoxb-' # 자신의 Token 입력
    notice_text(Token, '#컴퓨터-알림', '인터넷이 연결되었습니다.')
    
def notice_text(token, channel, text):
    '''
    Slack Bot 에 텍스트만 전달하는 함수\n
    token : 개인 토큰 코드
    channel : Slack Workspace 채널
    text : 보내고 싶은 메시지
    '''
    response = requests.post("https://slack.com/api/chat.postMessage",
        headers={"Authorization": "Bearer "+token},
        data={"channel": channel, "text": text})


프로그램을 구동하면 로그오프 창 하나 (이건 윈도우에서 띄우는 거), 인터넷 미연결 오류메시지창 하나가  뜨게 됩니다.

 

 

완성된 코드를 작업스케줄러에 컴퓨터를 시작할 때마다 작동할 수 있도록 등록해 줍니다.

파이썬에서 파일을 열고 쓰기를 하실 때 대상파일의 위치는 절대경로로 하시는걸 권합니다. 그렇지 않으면 파이썬에선 실행이 되는데 작업스케줄러에 등록하고 실행 안되는 경우가 생깁니다.

 

(** 작업스케줄러 등록하는 법 : 아래 링크 참고)

2021.10.02 - [프로젝트/[ed]_슬랙봇_증시알림] - [Python] 슬랙(Slack) 알림봇 설정하여 매일 증시 알림 받기 (4)

 


그리고 다시 시작합니다. 다시 시작한 다음에 인터넷이 연결되었다면, 슬랙봇을 통해 '인터넷이 연결되었습니다' 메시지를 송출합니다.
하지만 다시 시작을 해도 인터넷이 연결되어 있지 않다면 이번엔 추가적인 재시작을 하지 않습니다. 그 이유는, 다시 시작하는게 해결책이 아니라 생각하기 때문입니다.

게임도 잘 안하고 해서 10년이란 세월을 버텼지만,, 이젠 정말 컴퓨터를 바꿔야 하나 싶기도 하네요.

하지만 요즘 컴퓨터는 비싸니, 하는데까진 해봐야겠다 하는 생각이 들어 만들어보게 되었습니다.
앞으로 내 봇들이 일을 잘 하길 바라면서 말이죠 ㅎㅎ

 

728x90
반응형