알고리즘

ethminer 맥북 충전기 유무 & 디스플레이 꺼짐 유무에 따라 채굴하기

이온시옥 2018. 11. 22. 01:00
반응형

맥북을 사용하고!

쉘 스크립트를 알고!

외장 그래픽을 사용하는!

전문가만 사용하길!!!


이더리움을 채굴해주는 맥용 쉘스크립트입니다~

맥북이 충전기에 연결이되고 외장그래픽을 사용하지 않는 경우!!! 채굴이 진행됩니다!

두 조건이 모두 만족하지 않으면 채굴 XXX

자동 스크립트로 그냥 터미널창 켜두면 알아서 채굴합니다!!~~~


#!/bin/bash

min_watts=60 #충전기의 최소 watts

sleep_time=5 #오버헤드를 줄이기위해 sleep_time 지정. #sleep_time의 변수는 초(seconds)를 의미

            #sleep_time이가 높으면 높을 수록 어뎁터 유무를 확인을 초마다 진행하여 어뎁터 분리or연결 후 반응이 느림.

            #하지만 숫자가 크다면 시스템이 시간당 별로 안하기 때문에 오버헤드가 줄어짐...

            #숫자가 낮으면 오버헤드가 커지고 어뎁터 분리or연결의 반응이 빨라짐... 3~10정도가 적당할듯...


power_checking() { #파워가 연결이 되면 1을 리턴, 아니면 0을 리턴

    #어뎁터 연결 유무 뿐만아니라 어뎁터의 최소 watts를 넘길시 진행,, usb-c의 여러종류의 watt 때문... 맥에 문제가될수있음.

    local result=$(system_profiler SPPowerDataType | grep "Wattage (W):" | grep -Eo '[0-9]{1,9}') #현재 어뎁터의 watts를 result변수에 저장.

    charger=0

    if [[ $min_watts -le $result ]]; then #현재 watts가 min_watts보다 클 경우 power는 1.

        charger=1

    fi

}


graphic_checking() {

local result=$(active_gfx)

internal_graphic=0

if [[ "kHW_IntelHDGraphics630Item" == $result ]]; then

internal_graphic=1

fi

}


display_checking() {

#display_status가 값이 4이면 화면이 켜진거!

display_on=0

display_status=$(ioreg -n IODisplayWrangler | grep -i IOPowerManagement | perl -pe 's/^.*DevicePowerState\"=([0-9]+).*$/\1/')

if [ "$display_status" == "4" ]; then

display_on=1;

fi

}




start_mining() { #mining 시작 함수

    date

    echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" >&2

    echo "Start Mining @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" >&2

    echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" >&2


    #아래의 명령어에 실행할 채굴명령어 입력하기.

    # ex. ethminer를 실행한다면 아래와같이 ethminer프로그램의 위치와 옵션들(pool주소 & 사용자 계정, mining할 그래픽카드 등등.)

    ~/mining/ethminer/ethminer -G -P stratum+tcp://eth.pool.minergate.com:45791/eonse32@gmail.com --opencl-device 1

}


stop_mining() { #mining 종료 함수

    date

    echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" >&2

    echo "Terminate Mining @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" >&2

    echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" >&2


    killall ethminer #ethminer 프로그램 종료!

}


checking_pipe_for_charger_internal() { #채굴중일때 어뎁터가 분리되었는지 확인하는 함수

    while true #무한 반복

    do

    power_checking

    graphic_checking


        if [[ ( $charger == 0 || $internal_graphic == 0 ) ]]; then

        stop_mining

        break;

        fi

        sleep $sleep_time #오버헤드를 줄이기위해 5초 마다 확인함.

    done

}


checking_pipe_for_charger_display() { #채굴중일때 어뎁터가 분리되었는지 확인하는 함수

    while true #무한 반복

    do

    power_checking

    display_checking


        if [[ ( $charger == 0 || $display_on == 1 ) ]]; then

        stop_mining

        break;

        fi

        sleep $sleep_time #오버헤드를 줄이기위해 5초 마다 확인함.

    done

}


cnt=0

while true

do

    power_checking #어뎁터 연결유무확인

    graphic_checking

    display_checking


    if [[ ( $cnt == 0 && $charger == 0 ) ]]; then #만약 어답터가 연결되지 않고, 기다리는 경우에 

            echo "Waiting for charger connection..." #기다리는 문구 출력...

            cnt=1;

    elif [[ ( $cnt == 0 && $internal_graphic == 0 ) ]]; then

    echo "Charger is connected, BUT mac is using external graphic, now..." #기다리는 문구 출력...

    cnt=1;

    elif [[ ( $charger == 1 && $internal_graphic == 1 ) ]]; then #어뎁터가 연결되고, 내장그래픽을 사용한다면.

        cnt=0

        checking_pipe_for_charger_internal|start_mining #채굴진행과 연결해제여부 확인

    elif [[ ( $charger == 1 && $display_on == 0 ) ]]; then #어뎁터가 연결되고, 디스플레이가 꺼진 경우

    cnt=0

    checking_pipe_for_charger_display|start_mining

    echo "Display is ON. Terminated ethminer."

    fi

    #echo "charger"

    #echo $charger

    #echo "internal_graphic"

    #echo $internal_graphic

    #echo "display_on"

    #echo $display_on

    sleep $sleep_time

done



반응형