Script Bash: Mengontrol Bandwidth Transmisi Secara Otomatis

Halo semuanya. Ini adalah postingan kedua saya. Saya biasanya tidak menulis posting kecuali saya memiliki sesuatu yang baik untuk dibagikan dan kali ini saya memiliki sesuatu yang pasti akan menarik banyak orang.

Beberapa bulan yang lalu saya berpikir untuk membuat skrip untuk membatasi bandwidth aplikasi, tetapi saya memiliki beberapa masalah dan kesalahan yang menyulitkan saya, jadi saya mengajukan keraguan di lubang de <º DesdeLinux seandainya ada yang punya ide.

Jadi saya meninggalkannya sebentar dan suatu hari saya memutuskan untuk melanjutkan skrip. Saya melakukan banyak pengujian, saya banyak membaca tentang bash, dan saya mengalami sakit kepala di waktu luang, tetapi saya berhasil !!

Saya sangat puas dan saya telah memutuskan untuk membagikan kepada Anda skrip kecil saya agar Anda dapat menggunakan dan memperbaikinya. Saya berencana untuk melisensikannya di bawah GPLv3, tetapi ini adalah proyek pertama saya, jadi saya tidak begitu yakin bagaimana melakukan ini (saya membutuhkan saran dari siapa pun yang pernah melakukannya sebelumnya).

Nah, sekarang saya akan menjelaskan apa yang saya butuhkan dan apa yang saya lakukan untuk menyelesaikan masalah.

Situasi
Saya memiliki paket Internet 512Kbs, oleh karena itu saya gunakan Transmisi sebagai klien BitTorrent untuk mengunduh file besar (seperti LibreOffice dan beberapa distro GNU / Linux). Dengan kecepatan tersebut download membutuhkan waktu yang lama dan yang menjadi permasalahan adalah saat menggunakan web browser Firefox: membutuhkan waktu lama untuk dimuat.

Ketika saya terhubung ke Internet, saya mengaktifkan batas waktu unggah dan unduh transmisi dan menunggu Firefox dimuat, lalu mulai torrent lagi. Seperti yang akan Anda lihat, melakukan ini beberapa kali memang membosankan. Belum lagi terkadang saya langsung menghentikan sementara semua torrent dan kemudian lupa mengaktifkannya lagi, sehingga membuang-buang waktu yang berharga untuk mengunggah / mengunduh torrent.

Larutan
Untuk masalah ini saya memutuskan untuk membuat skrip di Bash yang pada dasarnya melakukan hal berikut:

1. Periksa bahwa Transmisi sedang berjalan dan tidak ada torrent yang dihentikan sementara. Jika demikian, nyalakan kembali torrent.

2. Verifikasikan bahwa Firefox sedang berjalan. Kemudian KB / s dikirim dan diterima olehnya dan menyimpannya dalam sebuah file.

3. Jika upload atau download browser KB / s melebihi kisaran referensi, pengaturan Transmisi upload / download diubah.

Hal ini memungkinkan ketika ingin mengakses halaman web, saat browser mengirim permintaan, upload file transmisi dibatasi dan saat data halaman diterima, download dibatasi. Ini berfungsi dengan baik saat mengakses beberapa halaman sekaligus dan hasilnya sebenarnya sama dengan Transmisi dinonaktifkan.

Keuntungan besarnya adalah bahwa ini sepenuhnya otomatis dan tidak memerlukan campur tangan saya.

Naskah
Meskipun dapat digunakan untuk mengontrol konsumsi bandwidth dari aplikasi apa pun, saat ini ia hanya ditulis untuk memecahkan masalah yang sangat khusus. Tetapi tidak terlalu sulit untuk melakukan modifikasi.

Requisitos
Agar dapat berfungsi dengan baik, perlu memiliki aplikasi «nethog'.

Dalam hal ini, karena skrip bekerja dengan Firefox dan Transmisi, aplikasi ini harus diinstal, serta "transmisi-remote" yang mengubah nilai unggah dan unduh torrent. Saya juga menggunakan dalam skrip "awk". Saya menyebutkannya karena saya tidak tahu apakah semua distro telah menginstalnya.

Perangkat lunak yang digunakan
Daftar aplikasi yang digunakan skrip dan sistem tempat skrip bekerja.

• Debian GNU / Linux 6.0.8
• Linux 2.6.32-5-686
• Firefox 24.0
• Transmisi 2.03 (11030)
• Nethog 0.7.0

Eksekusi
Ini harus dijalankan sebagai root karena nethog hanya dapat dijalankan dengan pengguna itu, tetapi transmisi jarak jauh itu dijalankan dengan pengguna biasa melalui perintah nya.

Skrip menggunakan perintah Bash internal perangkap Dengan itu dimungkinkan untuk mengembalikan nilai default beban / pembongkaran transmisi, ketika dihentikan dengan menggunakan sinyal SIGINT (CTRL + c) atau SIGTERM.

Masih tidak yakin bagaimana cara menjalankannya saat startup dan berhenti ketika saya mematikan atau memulai ulang komputer. Saya berpikir untuk meletakkan tautan di file /etc/rc.local tapi saya tidak tahu apakah itu akan berhasil, dan saya tidak begitu mengerti bagaimana / etc / bekerjainit.d (Saya bahkan melihat beberapa skrip yang ada di sana kerangka, tapi saya tidak mengerti mereka). Jika ada yang bisa membantu saya, saya akan sangat berterima kasih.

Baiklah teman-teman, itu saja. Saya berharap kontribusi kecil saya bermanfaat bagi Anda dan Anda dapat memperbaikinya jika Anda mau. Saya akan dengan senang hati membaca pendapat dan rekomendasi serta saran Anda jika ada masalah keamanan dengan file (Saya bukan programmer, saya hanya melakukan beberapa hal dari waktu ke waktu).

Saya tahu bahwa dengan beberapa perbaikan, ini bisa menjadi aplikasi yang hebat di masa depan, karena saya tidak tahu program apa pun yang melakukan hal yang sama. Misalnya, saya terpikir bahwa saya dapat memiliki antarmuka grafis ketenangan dan untuk dapat memilih aplikasi yang ingin kami prioritaskan dalam penggunaan bandwidth (browser web, pengelola pembaruan, transfer file, dll.) dan nilai referensi yang berbeda. Ya, ini agak ambisius, tetapi cukup berguna.

Anda dapat mengunduh skrip di paste. Terima kasih banyak telah membaca !!


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.

  1.   hidup dijo

    Oh! Menarik 😀

    1.    eliotime3000 dijo

      Di pojok kiri bawah Anda memiliki opsi untuk membatasi bandwidth yang digunakan Transmisi dalam mengunggah dan mengunduh. Dengan Transmisi saya tidak punya masalah dengan itu.

      1.    kue dijo

        Tapi ini otomatis, dan ada juga Transmisi tanpa antarmuka grafis sehingga Anda mungkin tidak memiliki fungsi yang begitu berguna.

      2.    Joaquin dijo

        Halo apa kabarmu.
        Ya, saya sudah tahu itu. Tapi itulah yang tidak ingin saya lakukan.
        Saya memiliki paket internet yang sangat buruk (512KB dan itu yang terbaik di wilayah saya).

        Dengan skrip saya, saya tidak khawatir melakukan semuanya dengan tangan. Bayangkan Anda membuka halaman di browser dan Transmisi menempati semua bandwidth pada saat itu, jadi halaman memerlukan beberapa saat untuk memuat (paling banyak 1 ', tetapi menjengkelkan). Saya selesai dengan "mengaktifkan batas waktu" setiap dua menit. Ini otomatis dan hampir seketika (memeriksa KB yang dikirim dan diterima oleh Firefox setiap 5 detik).

        Sungguh dalam kasus saya dengan kecepatan internet itu, itu luar biasa. Juga saya tidak tahu aplikasi lain yang melakukan ini, jika tidak maka tidak akan melakukannya. Yang saya lihat hanya membatasi bandwidth, tetapi tidak secara otomatis.

        Saya harap saya jelas. Terima kasih telah membaca!

        1.    Joaquin dijo

          Maaf aku salah. Mereka bukan 512KB, melainkan Kbit. (Artinya, 1/2 "Mega"). Maksimum yang dapat saya unduh adalah 75KB / dtk dan unggah 50KB / dtk. Saat itulah Internet baik-baik saja, jika tidak normal adalah 48 dan 23.

    2.    Joaquin dijo

      Gracias!

  2.   kue dijo

    Menarik, saya menggunakan qBittorrent dan menggunakan sakelar untuk batasan.

    Posting terlihat bagus dengan warna-warna itu 😉

    1.    Joaquin dijo

      Terima kasih untuk warnanya. Saya tidak pandai dalam hal itu, sepertinya sangat panjang dan monoton dengan begitu banyak teks.

  3.   jorge dijo

    Secara pribadi, saya menggunakan transmisi-daemon dan firefox dengan tab aplikasi langsung, jadi saya tidak menggunakan program eksternal atau lupa untuk melanjutkan torrent atau penyu yang diaktifkan (dan saya dapat mengontrolnya dari ponsel saya). Untuk memulai layanan, tambahkan pengguna (misalnya: adduser –disabled-password nethogs), buat file teks untuk daemon di /etc/init.d dengan nama (misalnya: nethogs-daemon) dan kemudian di debian ketik "update-rc.d nethogs-daemon defaults" sehingga ia mulai dengan sendirinya.

    File teks juga merupakan skrip bash, yang dapat Anda gabungkan menjadi skrip.
    Lihat apakah ini dapat membantu Anda, ini dapat digunakan untuk memulai transmisi-daemon, dapat digunakan untuk memulai nethog https://trac.transmissionbt.com/wiki/Scripts/initd

    1.    Joaquin dijo

      Hello!
      Mari kita lihat apakah saya mengerti: ini untuk memulai Transmisi saat startup dan menghentikannya saat mematikan atau memulai ulang. Dengan itu saya tidak punya masalah karena selalu dimulai dengan sendirinya dan mulai mengunduh (saya menambahkannya ke aplikasi saat startup di Xfce).

      Masalah saya adalah jika saya meletakkan skrip di rc.local atau di init.d saya tidak tahu bagaimana komputer menghentikan skrip. Artinya, jelas ketika mematikan / memulai ulang PC, semua proses dihentikan (dan dengan itu Transmisi dan Nethogs juga) tetapi saya tidak tahu apa yang akan terjadi pada skrip saya.

      Dan mengapa hal itu mengganggu saya? Skrip membuat file di / tmp dan mengontrol kecepatan Transmisi. Jika saya menjalankannya di terminal dan tiba-tiba menghentikannya (misalnya dengan CTRL + c), skrip, sebelum menutup, mengembalikan kecepatan default (jika perlu) dan kemudian menghentikan Nethog dan menghapus file dari / tmp. Saya mencoba membuatnya menjadi "profesional" mungkin sehingga tidak meninggalkan file longgar atau proses latar belakang.

      Tentang apa yang Anda katakan, saya tidak mengerti apa itu "tab aplikasi langsung".

      1.    jorge dijo

        Tab aplikasi adalah tab permanen, selalu terbuka dan diminimalkan dalam firefox http://i.imgur.com/a5i0aP3.png (menu kontekstual di tab, klik «tab tempel»). Ketika daemon mengirim sinyal TERM, mereka menunggu beberapa saat, sampai mereka menutup sesi, dan menyimpan datanya. Perhatikan bahwa dalam tautan yang saya berikan sebelumnya ketika keluar dari skrip memanggil start-stop-daemon dan memberi tahu transmisi untuk berhenti, di sana Anda dapat menempelkan "killall nethogs" dan apa yang berisi StopScript. Skrip init dalam hal ini Anda harus memanggilnya sebagai root alih-alih pengguna tertentu, karena ini membutuhkan hak istimewa.

        1.    Joaquin dijo

          Terima kasih atas tipnya. Segera setelah saya punya waktu, saya akan mencobanya!

  4.   Facundo dijo

    Bagus, saya telah menemukan kelemahan ini karena meskipun Anda memiliki koneksi yang cepat, Anda terpaksa membatasi transmisi saat Anda ingin menjelajah dan dengan demikian "membuang" waktu.
    Saya akan mencobanya ketika saya bisa. Salam dan terima kasih !!

    1.    Joaquin dijo

      Terima kasih untukmu! Semoga ini bisa membantu Anda!

      1.    Facundo dijo

        Halo lagi Joaquin. Saya melihat bahwa Anda berhati-hati dalam menanggapi semua komentar jadi saya akan memanfaatkannya dan saya akan mengajukan beberapa pertanyaan pemula.
        Pertama, bagaimana cara mengetahui jika saya telah memasang skrip "awk"? Saya menggunakan Debian 7.2.
        Kedua, saya tidak tahu apa yang harus dilakukan dengan kode tempel. Saya harus mengambil editor teks dan menyimpannya ke file bernama "bandwidth-controller.sh" dan kemudian menjalankannya sebagai "./band-width-control.sh". Ini adalah bagian dimana saya paling tersesat.
        Ketiga: Ketika Anda mengatakan untuk menjalankannya sebagai root, apakah perlu mengubah dari pengguna ke root atau dengan sudo?

        Jika Anda memiliki bacaan untuk merekomendasikan saya tentang masalah ini, saya menghargainya.
        Salam!

  5.   giskard dijo

    Itu sebabnya saya selalu menghapus Transmisi dan menginstal Deluge. Nah, untuk itu dan sedikit lagi hal-hal yang ditawarkan Air Bah kepada saya yang tidak dibawa oleh orang lain.

    1.    Joaquin dijo

      Hai, saya tidak tahu Air Bah. Masalah utama saya adalah layanan internet. Dengan ini saya memerasnya sepenuhnya.

  6.   panda dijo

    Hai. bandwidth saya juga terbatas jadi saya mencoba skrip ini. Tapi itu tidak berhasil. kesalahan tampaknya ada di perintah nethogs -t. ia mengembalikan kesalahan "Menunggu paket pertama tiba (lihat bug sourceforge.net 1019381)" sudah mencoba mint, archlinux dan tidak ada. Perintah apa yang seharusnya dikembalikan? Saya kira saya harus mencetak dalam teks biasa bandwidth yang digunakan oleh setiap aplikasi. Apakah Anda tahu program lain yang memungkinkan Anda mendengarkan jaringan?

    1.    Joaquin dijo

      Halo apa kabarmu.
      Itu adalah bug Nethogs. Tampaknya juga bagi saya, tetapi tetap berhasil.

      Apa yang dilakukan Nethogs adalah menunjukkan proses yang menghabiskan bandwidth paling banyak, secara real time. Dalam skrip, outputnya disimpan dalam file teks "net.list", sehingga nanti bisa disaring.

      Skrip hanya berfungsi dengan Transmission (klien BitTorrent) dan Firefox (browser web). Apa yang dilakukannya adalah membatasi bandwidth Transmisi saat Firefox memuat halaman web. Anda perlu menginstal: Nethogs, Transmission, Transmission-remote dan Firefox.

      Semuanya dijelaskan di pos, jadi saya tidak tahu apa masalah Anda.

      PS: Harap tulis dengan benar dan tingkatkan ejaan Anda. Ini adalah komentar, bukan pesan teks.

      1.    panda dijo

        skrip tidak bekerja untuk saya. mencetak pesan kesalahan itu berkali-kali. jalankan "nethogs -t" di terminal untuk melihat apa yang dilakukannya tetapi tidak mencetak apa pun, hanya kesalahannya. di pc saya tidak berfungsi. Saya membayangkan bahwa itu harus mencetak sesuatu yang mirip dengan apa yang dicetaknya ketika dijalankan tanpa -t, menunjukkan proses dan bandwidth. tetapi dalam kasus saya tidak mencetak semua itu. distro mana yang Anda gunakan untuk mengembangkan skrip?

        1.    Joaquin dijo

          Jika Anda melihat lebih dekat, posting tersebut berisi semua perangkat lunak yang digunakan dan versinya. Saya tidak tahu mengapa terjadi kesalahan, tetapi menurut saya setiap kali "nethogs -t" dijalankan. Dalam skrip itu akan terjadi setiap 2 ″.

          Mungkin saja ketika Anda menjalankan nethogs, tidak ada proses yang menggunakan jaringan dan oleh karena itu Anda tidak mendapatkan keluaran apa pun.

          Skrip harus dijalankan sebagai root karena nethogs membutuhkan pengguna tersebut untuk berfungsi.

          sekarang saya ingat sesuatu yang penting dan saya tahu mengapa itu tidak berhasil untuk Anda:

          ANDA HARUS MENGEDIT skrip dan mengubah nama pengguna biasa. Dalam skrip ini disebut "joaquin". Anda harus mengubahnya menjadi nama pengguna Anda.

          Maaf saya tidak menyadarinya, saya harus memasukkan nama dalam variabel. Masalahnya adalah saya tidak berpikir untuk membuatnya begitu umum, saya hanya ingin menunjukkannya kepada Anda sehingga Anda dapat melihatnya dan siapa pun yang ingin bisa mendapatkan ide tentang bagaimana melakukannya. Saya tidak melakukannya dengan maksud bahwa itu akan berfungsi pada peralatan apa pun, yang membutuhkan waktu dan saya tidak tahu bagaimana memprogramnya, beberapa hal terjadi pada saya.

          Selamat mencoba, ada yang bertanya lagi. Dan silahkan baca lagi postingan dan komentar scriptnya.

  7.   Facundo dijo

    Halo Joaquín, beri tahu saya hal berikut:

    transmisi-jarak jauh: (http://localhost:9091/transmission/rpc/) Tidak dapat terhubung ke server
    ioctl gagal saat membuat IP lokal untuk perangkat yang dipilih eth0. Anda dapat menentukan perangkat pada baris perintah.

    ada ide ?? Terima kasih!

    1.    Joaquin dijo

      Halo apa kabarmu.
      Maaf, tapi saya tidak tahu 😀
      Dari apa yang saya pahami kesalahan mengatakan, ini adalah masalah dengan ioctl, tapi saya tidak tahu apa itu.

      Mungkin Anda dapat mencoba menghentikan skrip dan melihat apakah transmisi-remote berfungsi dengan beberapa opsinya (baca halaman manualnya dengan perintah "man").