나스에 접속자가 없으면 꺼지게 만드는 쉘스크립트 만들기..

りんごといちご

제가 리눅스를 정말 하나도 모르다 보니 어떻게 해야 하는지 감이 안오네요.

 

불과 며칠전에  쉘스크립트라는 거를 알게되어서 

조금 공부해서 파일 옮기기, ffmpeg로  인코딩시키기

2가지 만들어봤습니다.

 

그리고 제게 필요한 기능이 나스 사용자가 없이 1시간이 경과되면 꺼지게 하는 기능입니다.

 

평상시에 나스를 꺼두고  원격으로 켜서 사용하고 있는데요

 

omv +포테이너 도커 + jellyfin,넥스트클라우드

이렇게 쓰고있습니다.

 

어떤 명령어를 이용해야 할지 모르겠는데  힌트만 좀  알려주시면

제가 찾아보겠습니다.

 

 

 

나스 관심 있어요

적용중인 도장이 없습니다.

* 가입일 : 2022-08-17
* 총 게시글 수 : 3
* 총 댓글 수 : 8
댓글
14
  • Intuit
    2022.10.05

    간단한 방법은 없을것 같은데...

    각 서비스별로 접속자 있는지 상시로 확인하다가 없으면 종료시켜야 하고

    접속자 없을때 바로 꺼지면 또 아무도 접속 못하는 상황이 될테니까

    접속자 없을때 일정시간 지나야 카운팅 되도록 해야하고...

    그냥 쉘스크립트로는 안되고 데몬으로 올려야 할것 같은데 

    쉽지는 않겠네요

  • Intuit
    りんごといちご
    작성자
    2022.10.05
    @Intuit 님에게 보내는 답글

    답변감사합니다.

    데몬이라는게 있는거군요.

    크론탭+쉘 스크립트로 주기적으로 검사하는 방식으로 만들려했는데 데몬을 공부해야겠습니다.

  • りんごといちご
    달소
    2022.10.05
    @りんごといちご 님에게 보내는 답글

    시놀 쉘에서 사용자 체크가 가능하다면

    현재 사용자와 마지막 로그인시간을 계산해서 끄면될거같은데,, 이게 가능한건지 모르겠네요,,

  • 달소
    りんごといちご
    작성자
    2022.10.08
    @달소 님에게 보내는 답글

    답변감사합니다! OMV를 쓰고있습니다. jellyfin이랑 nextcloud의 로그파일 읽어서 끄는 방향으로 만들어볼까합니다.

  • 뻘짓의초심자
    2022.10.06

    전 문외한이지만 한 번 로직만 짜보자면...

     

     

    1분마다 실행:

    if 특정크기 이상의 output트래픽이 1시간이내로 발생:

    pass

    else:

    서버종료

     

    저도 쉘은 잘 몰라서 이 정도가 한계네요...

  • 뻘짓의초심자
    りんごといちご
    작성자
    2022.10.08
    @뻘짓의초심자 님에게 보내는 답글

    답변감사합니다! 네트워크 트래픽을 이용하는 방법도 고려해봐야겠습니다. 제가 리눅스 명령어도 문법도 아직 모르는 게 많아서 특정 프로세스(jellyfin 등)의 트래픽만 읽어들이는 명령어를 혹시 알고계시나요?

  • りんごといちご
    뻘짓의초심자
    2022.10.08
    @りんごといちご 님에게 보내는 답글

    원하시는 정보일지는 모르겠으나 이런 것도 있네요

    https://askubuntu.com/questions/105536/tool-to-shutdown-system-when-there-is-no-network-traffic

    아마 여기서 interface를 jellyfind에 해당하는 도커 인터페이스로 수정하면 되지 않을까 하네요...

    저도 문외한인지라 테스트가 필요하실 듯 합니다.

  • 뻘짓의초심자
    りんごといちご
    작성자
    2022.10.08
    @뻘짓의초심자 님에게 보내는 답글

    감사합니다. ifstat 설치해서 공부해보겟습니다. ifstat으로 보니 docker부분도 나오네요

  • 화정큐삼
    2022.10.06

    제가 작년에 비슷한 스크립트를 작성해서 2CPU 쪽 강좌란에 올렸던 내용이 있는데요.

    제가 한번 만들어 드려 볼까요?

    약간 응용하면 될것 같기도 한데요.

    https://www.2cpu.co.kr/lec/3995

  • 화정큐삼
    화정큐삼
    2022.10.07
    @화정큐삼 님에게 보내는 답글

    위 강좌 내용은 한번 먼저 살펴보시고 아래 응용한 이 스크립트로 사용해 보십시요.

    이 스크립트는 일정한 주기로 스케줄러에 사용자 정의 스크립트로 등록하고 주기적으로 불러주셔야 합니다.

    실행 커맨드는 아래처럼 합니다.

    bash /volume1/shell/poweroff_if_noconnection.sh

    그리고 로컬에 sudo 접속은 sudores 처리까지 해주셔야 한번에 암호 묻지 않고 종료가능할것 같습니다.

     

    vi /volume1/shell/poweroff_if_noconnection.sh

     

    #!/bin/sh

    cnt=$(sqlite3 /volume1/log/SYNOSYSLOGDB__LOCALARCH.DB "select count(*) as cnt from logs a where datetime(ldate,ltime) between datetime('now','localtime','-1 hours') and datetime('now','localtime') and prog in ('auth','Connection');")

    echo "$cnt"

    if [ "$cnt" -eq "0" ] ; then

        echo "1시간내 접속자 없음, NAS를 종료합니다."

        sudo "poweroff"

    else

        echo "1시간내 접속자 존재"

    fi

     

  • 화정큐삼
    화정큐삼
    2022.10.07
    @화정큐삼 님에게 보내는 답글

    sudores 는 아래처럼 만듭니다.

     

    (로그인한 계정에서 그대로 입력합니다. root의 /etc/sudoers 파일에 암호입력없이 로그인이 되도록 1줄 추가됩니다.)

     

    echo -e "\n$USER ALL=(ALL) NOPASSWD: ALL\n" | sudo tee -a /etc/sudoers

     

    (설정이 잘 적용되었는지 확인합니다)

     

    sudo -l

     

    — 결과로 아래 라인이 더 추가되어 보여야 합니다.

     

    (ALL) NOPASSWD: ALL

     

    (sudo 접속 시험을 합니다.)

     

    sudo -i

  • 화정큐삼
    りんごといちご
    작성자
    2022.10.08
    @화정큐삼 님에게 보내는 답글

    답변 감사합니다! 시놀로지는 아니고 OMV(데비안) 쓰고 있어요. 하지만 참고해보겟습니다. . 지금 두가지 방법 고려해보고있는데 젤리핀이랑 넥스트클라우드 로그파일에서 접속로그랑 시간 추출해서(tail이랑 grep명령어 사용) 1시간동간 갱신이 없으면 꺼지는 방법이랑 프로세스별 CPU점유율 읽어들여서 일정시간 이상 일정퍼센트 점유율을 쓰지않고 1시간 경과되면 shutdown명령어 날리는 방법 두가지 고려하고 있습니다.

  • 화정큐삼
    2022.10.07

    이 방법은 시놀로지를 사용하신다는 가정하에 로그 DB 파일을 활용하는건데요.

    시놀로지가 아니라면 더 연구가 들어가야 합니다.

    시놀로지 사용하고 계신것 맞나요?

    그리고 기본설치되어 있는 로그센터는 기본기능만 있어서 아카이브 설정을 하시려면

    패키지 관리자에서 로그 센터 고급기능을 한번더 설치해 주셔야 합니다.

    로그 센터의 개요부분만 봐도 왜 저렇게 쿼리 하는지 이해가 되실겁니다.

    https://blog.naver.com/pksl7890/222484376336

  • 화정큐삼
    りんごといちご
    작성자
    2022.10.08
    @화정큐삼 님에게 보내는 답글

    답변감사합니다! 시놀로지는 아니고 OMV(데비안) 쓰고있습니다.

댓글 쓰기
권한이 없습니다.