Script Bash : 자동으로 전송 대역폭 제어

안녕하세요 여러분. 이것은 나의 두 번째 게시물입니다. 나는 공유 할 좋은 것이 없으면 보통 글을 쓰지 않는다. 이번에는 분명히 많은 사람들이 관심을 가질만한 것이있다.

몇 달 전에 저는 응용 프로그램의 대역폭을 제한하는 스크립트를 만들려고했지만 문제와 오류가있어 어렵게 만들었습니다. foro de <º DesdeLinux 누군가가 아이디어를 가지고 있다면.

그래서 잠시 남겨두고 어느 날 대본을 다시 시작하기로 결정했습니다. 테스트도 많이했고 bash에 대해 많이 읽었고 여가 시간에 두통이 있었지만 해냈어요 !!

정말 만족 스럽기 때문에 사용하고 개선 할 수 있도록 내 작은 스크립트를 공유하기로 결정했습니다. GPLv3에 따라 라이선스를 부여 할 계획이지만 첫 번째 프로젝트이므로 어떻게해야할지 잘 모르겠습니다 (이전에 해본 사람의 조언이 필요합니다).

자, 이제 내 필요가 무엇인지, 문제를 해결하기 위해 무엇을했는지 설명하겠습니다.

상태
512Kbs의 인터넷 계획이 있으므로 전달 대용량 파일 (예 : LibreOffice 및 일부 GNU / Linux 배포판)을 다운로드하기위한 BitTorrent 클라이언트로. 이 속도로 다운로드하는 데 시간이 오래 걸리고 문제는 웹 브라우저를 사용할 때입니다. 파이어 폭스:로드하는 데 시간이 오래 걸립니다.

인터넷에 연결할 때 전송 업로드 및 다운로드 시간 제한을 활성화하고 Firefox가로드 될 때까지 기다린 다음 토렌트를 다시 시작합니다. 보시다시피이 작업을 몇 번 수행하는 것은 지루합니다. 때로는 모든 토렌트를 직접 일시 중지 한 다음 다시 활성화하는 것을 잊어 버려 토렌트를 업로드 / 다운로드하는 데 귀중한 시간을 낭비하게됩니다.

해결
이 문제에 대해 기본적으로 다음을 수행하는 Bash 스크립트를 만들기로 결정했습니다.

1. 전송이 실행 중이고 토렌트가 일시 중지되지 않았는지 확인하십시오. 그렇다면 급류를 다시 켜십시오.

2. Firefox가 실행 중인지 확인하십시오. 그런 다음 전송 및 수신 된 KB / s를 가져와 파일에 저장합니다.

3. 브라우저 업로드 또는 다운로드 KB / s가 기준 범위를 초과하면 전송 업로드 / 다운로드 설정이 변경됩니다.

이를 통해 웹 페이지에 액세스하고자 할 때 브라우저가 요청을 보낼 때 전송 파일 업로드가 제한되고 페이지 데이터가 수신되면 다운로드가 제한됩니다. 이것은 한 번에 여러 페이지에 액세스 할 때 훌륭하게 작동하며 결과는 실제로 전송이 꺼진 상태와 동일합니다.

가장 큰 장점은 완전 자동이며 내 개입이 필요하지 않다는 것입니다.

스크립트
모든 응용 프로그램의 대역폭 소비를 제어하는 ​​데 사용할 수 있지만 현재로서는 매우 특정한 문제를 해결하기 위해 작성되었습니다. 그러나 수정하는 것은 그리 어렵지 않습니다.

요구 사항
제대로 작동하려면 응용 프로그램이 필요합니다«Nethogs".

이 경우 스크립트가 Firefox 및 Transmission에서 작동하므로 토렌트의 업로드 및 다운로드 값을 변경하는 "transmission-remote"외에도 이러한 응용 프로그램을 설치해야합니다. 나는 또한 스크립트 "awk"에서 사용합니다. 모든 배포판에 설치되어 있는지 모르겠 기 때문에 언급했습니다.

사용 된 소프트웨어
스크립트가 사용하는 응용 프로그램 및 작동하는 시스템 목록입니다.

• Debian GNU / Linux 6.0.8
• Linux 2.6.32-5-686
• Firefox 24.0
• 전송 2.03 (11030)
• Nethogs 0.7.0

실행
루트로 실행해야합니다. Nethogs 해당 사용자로만 실행할 수 있지만 전송 원격 명령을 통해 일반 사용자로 실행됩니다. 그의.

스크립트는 내부 Bash 명령을 사용합니다. 트랩 SIGINT (CTRL + c) 또는 SIGTERM 신호에 의해 중지되었을 때 전송의로드 / 언로드 기본값을 복원 할 수 있습니다.

시작할 때 실행하고 컴퓨터를 종료하거나 다시 시작할 때 중지하는 방법을 아직 모르겠습니다. 파일에 링크를 넣을 생각 중이 었어요 /etc/rc.local 하지만 작동할지 모르겠고 / etc / 작동 방법을 정말로 이해하지 못합니다초기화 (저는 거기에있는 일부 스크립트를 보았습니다. 골격,하지만 이해가 안 돼요). 누구든지 저를 도울 수 있다면 매우 감사하겠습니다.

여러분, 그게 다입니다. 저의 작은 기여가 여러분에게 도움이되었고 원한다면 개선 할 수 있기를 바랍니다. 파일에 보안 문제가있는 경우 귀하의 의견과 권장 사항 및 제안 사항을 기꺼이 읽어 드리겠습니다 (저는 프로그래머가 아니며 가끔 몇 가지 작업 만 수행합니다).

나는 같은 일을하는 어떤 프로그램도 모르기 때문에 몇 가지 수정을 통해 미래에 훌륭한 애플리케이션이 될 수 있다는 것을 알고 있습니다. 예를 들어 그래픽 인터페이스를 천정 대역폭 (웹 브라우저, 업데이트 관리자, 파일 전송 등) 및 다른 참조 값 사용시 우선 순위를 지정할 응용 프로그램을 선택할 수 있습니다. 예, 다소 야심적이지만 매우 유용합니다.

다음에서 스크립트를 다운로드 할 수 있습니다. 파스타. 읽어 주셔서 감사합니다 !!


코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.

  1.   엘라 브

    오! 흥미로운 😀

    1.    엘리오타임3000

      왼쪽 하단에는 Transmission이 업로드와 다운로드 모두에서 사용하는 대역폭을 제한하는 옵션이 있습니다. 전송을 사용하면 문제가 없었습니다.

      1.    쿠키

        그러나 이것은 자동이며 그래픽 인터페이스가없는 전송도 있으므로 해당 기능이 그렇게 편리하지 않을 수 있습니다.

      2.    호아킨

        안녕하세요, 잘 지내세요.
        예, 이미 알고 있습니다. 그러나 그것은 정확히 내가하고 싶지 않은 일입니다.
        나는 매우 열악한 인터넷 계획을 가지고 있습니다 (512KB이며 내 지역에서 최고입니다).

        내 대본을 사용하면 모든 것을 손으로하는 것에 대해 걱정하지 않습니다. 브라우저에서 페이지를 열고 전송이 그 순간 모든 대역폭을 차지하고 있으므로 페이지를로드하는 데 시간이 걸립니다 (최대 1 '이지만 짜증이납니다). 5 분마다 "시간 제한 활성화"를 완료했습니다. 이것은 자동이며 거의 즉각적입니다 (XNUMX 초마다 Firefox에서 보내고받은 KB를 확인합니다).

        제 경우에는 인터넷 속도가 정말 훌륭합니다. 또한이 작업을 수행하는 다른 응용 프로그램에 대해서도 알지 못합니다. 그렇지 않으면 수행하지 않았을 것입니다. 내가 본 것은 대역폭을 제한하지만 자동은 아닙니다.

        분명했으면 좋겠어요. 읽어 주셔서 감사합니다!

        1.    호아킨

          미안해, 내가 틀렸어. 512KB가 아니라 Kbit입니다. (즉, 1/2 "메가"). 다운로드 할 수있는 최대 값은 75KB / s 및 50KB / s 업로드입니다. 인터넷이 정상이고 그렇지 않으면 정상이 48과 23입니다.

    2.    호아킨

      당신을 감사하십시오!

  2.   쿠키

    흥미롭게도 저는 qBittorrent를 사용하고 제한을 위해 스위치를 사용합니다.

    게시물은 그 색상으로 멋지게 보입니다 😉

    1.    호아킨

      색상 감사합니다. 나는 그것을 잘하지 못합니다. 너무 많은 텍스트로 매우 길고 단조롭게 보입니다.

  3.   호르헤

    개인적으로 저는 라이브 애플리케이션 탭에서 전송 데몬과 파이어 폭스를 사용하기 때문에 외부 프로그램과 함께 걷거나 급류 또는 활성화 된 거북이를 계속하는 것을 잊지 않습니다. 서비스를 시작하기 위해 사용자가 추가되고 (예 : adduser –disabled-password nethogs) 데비안의 텍스트 파일이 /etc/init.d에 이름 (예 : nethogs-daemon)으로 생성되고 데비안에서는 "update-rc.d nethogs-daemon defaults"를 입력하면 자동으로 시작됩니다.

    텍스트 파일도 bash 스크립트이며 스크립트를 병합 할 수 있습니다.
    이것이 당신을 도울 수 있는지, 그것은 전송 데몬을 시작하는 데 사용될 수 있으며, 넷혹을 시작하는 데 사용될 수 있습니다 https://trac.transmissionbt.com/wiki/Scripts/initd

    1.    호아킨

      안녕하세요!
      내가 이해하는지 확인하십시오. 이것은 시작할 때 전송을 시작하고 종료하거나 다시 시작할 때 중지하는 것입니다. 그것으로 나는 항상 자체적으로 시작되고 다운로드를 시작하기 때문에 문제가 없습니다 (Xfce에서 시작할 때 응용 프로그램에 추가했습니다).

      내 문제는 스크립트를 rc.local 또는 init.d에 배치 할 때 컴퓨터가 스크립트를 중지하는 방법을 모른다는 것입니다. 즉, PC를 종료 / 다시 시작하면 모든 프로세스가 종료되지만 (Transmission 및 Nethogs도 함께) 스크립트가 어떻게되는지 모르겠습니다.

      그게 왜 나를 괴롭 히나요? 스크립트는 / tmp에 파일을 생성하고 전송 속도를 제어합니다. 터미널에서 실행하고 갑자기 중지하면 (예 : CTRL + c 사용) 닫기 전 스크립트가 기본 속도 (필요한 경우)를 복원 한 다음 Nethogs를 중지하고 / tmp에서 파일을 삭제합니다. 느슨한 파일이나 백그라운드 프로세스를 남기지 않도록 가능한 "전문적인"것으로 만들려고했습니다.

      말씀하신 내용에 대해 "라이브 애플리케이션 탭"이 무엇인지 이해하지 못했습니다.

      1.    호르헤

        응용 프로그램 탭은 영구적 인 탭이며 항상 열려 있고 Firefox 내에서 최소화됩니다. http://i.imgur.com/a5i0aP3.png (탭의 상황에 맞는 메뉴,«탭 붙여 넣기»클릭). 데몬이 TERM 신호를 보낼 때 로그 아웃 할 때까지 잠시 기다렸다가 데이터를 저장합니다. 스크립트를 종료 할 때 이전에 제공 한 링크에서 start-stop-daemon을 호출하고 전송을 중지하라고 지시하면 여기에 "killall nethogs"와 StopScript가 포함 된 내용을 붙여 넣을 수 있습니다. 이 경우 init 스크립트는 권한이 필요하기 때문에 특정 사용자 대신 루트로 호출해야합니다.

        1.    호아킨

          팁 주셔서 감사합니다. 시간이 생기면 바로해볼 게요!

  4.   파쿤도

    좋아, 나는 당신이 빠른 연결을 가지고 있더라도 당신이 브라우징하고 따라서 시간을 "낭비"하고 싶은 동안 전송을 제한해야하기 때문에이 불편 함을 발견했다.
    할 수있을 때해볼 게요. 인사와 감사 !!

    1.    호아킨

      고마워! 이것이 당신을 도울 수 있기를 바랍니다!

      1.    파쿤도

        안녕하세요, 호아킨. 여러분이 모든 댓글에 대한 답변을 처리하고 있다는 것을 알고 있으므로이를 활용하고 몇 가지 신인 질문을 할 것입니다.
        먼저 "awk"스크립트가 설치되어 있는지 어떻게 알 수 있습니까? 저는 Debian 7.2를 사용합니다.
        둘째, 붙여 넣기 코드로 무엇을해야할지 모르겠습니다. 텍스트 편집기를 가져와 "bandwidth-controller.sh"라는 파일에 저장 한 다음 "./band-width-control.sh"로 실행해야합니다. 이것은 내가 가장 잃어버린 부분입니다.
        셋째 : 루트로 실행하라고하면 사용자에서 루트로 변경해야하나요, 아니면 sudo로 실행해야하나요?

        이 주제에 대해 저를 추천 할만한 독서가 있다면 감사합니다.
        안녕하십니까!

  5.   Giskard

    그래서 저는 항상 Transmission을 제거하고 Deluge를 설치합니다. 글쎄, 그것과 대홍수가 나에게 제공하는 다른 것들이 가져다주지 않는 것들에 대해.

    1.    호아킨

      안녕하세요, 저는 대홍수를 모릅니다. 내 주요 문제는 인터넷 서비스입니다. 이것으로 나는 그것을 최대한 짠다.

  6.   팬더

    안녕하세요. 내 대역폭도 제한되어 있으므로이 스크립트를 시도했습니다. 하지만 작동하지 않습니다. 오류는 nethogs -t 명령에있는 것 같습니다. "Waiting for first packet to arrival (sourceforge.net bug 1019381 참조)"라는 오류를 반환합니다. mint, archlinux 및 아무것도 시도하지 않았습니다. 반환해야하는 명령은 무엇입니까? 각 응용 프로그램에서 사용하는 대역폭을 일반 텍스트로 인쇄해야한다고 가정합니다. 네트워크를들을 수있는 다른 프로그램을 알고 있습니까?

    1.    호아킨

      안녕하세요, 잘 지내세요.
      그것은 Nethogs 버그입니다. 나에게도 보이지만 어쨌든 작동합니다.

      Nethogs가하는 일은 가장 많은 대역폭을 소비하는 프로세스를 실시간으로 보여주는 것입니다. 스크립트에서 출력은 "net.list"텍스트 파일에 저장되므로 나중에 필터링 할 수 있습니다.

      이 스크립트는 Transmission (BitTorrent 클라이언트) 및 Firefox (웹 브라우저)에서만 작동합니다. 그것이하는 일은 Firefox가 웹 페이지를로드 할 때 전송의 대역폭을 제한하는 것입니다. 다음을 설치해야합니다 : Nethogs, Transmission, Transmission-remote 및 Firefox.

      게시물에 모두 설명되어 있으므로 문제가 무엇인지 모르겠습니다.

      추신 : 정확하게 작성하고 철자를 향상 시키십시오. 문자 메시지가 아니라 댓글입니다.

      1.    팬더

        스크립트가 나를 위해 작동하지 않습니다. 오류 메시지를 여러 번 인쇄합니다. 터미널에서 "nethogs -t"를 실행하여 수행하는 작업을 확인하지만 아무것도 인쇄하지 않고 오류 만 인쇄합니다. 내 PC에서 작동하지 않습니다. -t없이 실행할 때 인쇄하는 것과 비슷한 것을 인쇄하여 프로세스와 대역폭을 표시해야한다고 생각합니다. 하지만 제 경우에는 아무것도 인쇄하지 않습니다. 스크립트 개발에 사용한 배포판은 무엇입니까?

        1.    호아킨

          자세히 보면 게시물에 사용 된 모든 소프트웨어와 해당 버전이 포함되어 있습니다. 왜 오류가 발생했는지 모르겠지만 "nethogs -t"가 실행될 때마다 나에게 나타납니다. 스크립트에서는 2 ″마다 발생합니다.

          nethogs를 실행할 때 네트워크를 사용하는 프로세스가 없으므로 출력이 표시되지 않을 수 있습니다.

          nethogs는 해당 사용자가 작동해야하므로 스크립트를 루트로 실행해야합니다.

          이제 나는 중요한 것을 기억했고 왜 그것이 당신에게 효과가 없는지 압니다.

          스크립트를 편집하고 일반 사용자의 이름을 변경해야합니다. 스크립트에서는 "joaquin"이라고합니다. 사용자 이름으로 변경해야합니다.

          깨닫지 못해서 죄송합니다. 변수에 이름을 넣어야했습니다. 문제는 그렇게 일반화 할 생각이 없었고, 여러분이 볼 수 있고 원하는 사람들이 어떻게할지에 대한 아이디어를 얻을 수 있도록 여러분에게 보여 드리고 싶었습니다. 나는 그것이 어떤 컴퓨터에서도 작동 할 의도로 그것을하지 않았다. 그것은 시간이 걸리고 나는 프로그래밍하는 방법을 모른다. 어떤 일이 내게 일어난다.

          행운을 빕니다. 무엇이든 다시 묻습니다. 그리고 대본의 글과 댓글을 다시 읽어주세요.

  7.   파쿤도

    안녕 Joaquín, 나에게 다음을 말 해주세요 :

    전송 원격 : (http://localhost:9091/transmission/rpc/) 서버에 연결할 수 없습니다.
    선택한 장치 eth0에 대한 로컬 IP를 설정하는 동안 ioctl이 실패했습니다. 명령 줄에서 장치를 지정할 수 있습니다.

    어떤 아이디어 ?? 감사!

    1.    호아킨

      안녕하세요, 잘 지내세요.
      실례 합니다만 모르겠어요 😀
      내가 이해하는 오류는 ioctl의 문제이지만 그게 뭔지 모르겠습니다.

      스크립트를 중지하고 transmission-remote가 일부 옵션과 함께 작동하는지 확인할 수 있습니다 ( "man"명령을 사용하여 man 페이지를 참조하십시오).