Script Bash: İletim Bant Genişliğini Otomatik Olarak Kontrol Edin

Herkese merhaba. Bu benim ikinci yazım. Paylaşacak iyi bir şeyim olmadıkça genellikle gönderi yazmam ve bu sefer kesinlikle birçok kişinin ilgileneceği bir şeyim var.

Birkaç ay önce uygulamaların bant genişliğini sınırlamak için bir komut dosyası yapmayı düşünüyordum, ancak işimi zorlaştıran bazı problemlerim ve hatalarım vardı, bu yüzden foro de <° DesdeLinux Herhangi birinin bir fikri olması durumunda.

Bu yüzden bir süre bıraktım ve bir gün senaryoya devam etmeye karar verdim. Çok fazla test yaptım, bash hakkında çok şey okudum ve boş zamanlarımda başım ağrıyordu, ama yaptım !!

Çok büyük bir memnuniyet duyuyorum ve bu yüzden kullanıp geliştirebilmeniz için küçük senaryomu sizinle paylaşmaya karar verdim. GPLv3 kapsamında lisanslamayı planlıyorum, ancak bu benim ilk projem, bu yüzden bunu nasıl yapacağımdan pek emin değilim (daha önce kim yapmışsa ondan tavsiye almam gerekiyor).

Şimdi ihtiyacımın ne olduğunu ve sorunu çözmek için ne yaptığımı açıklayacağım.

Durum
512Kbs'lik bir İnternet planım var, bu yüzden kullanıyorum transmisyon Büyük dosyaları indirmek için bir BitTorrent istemcisi olarak (LibreOffice ve bazı GNU / Linux dağıtımları gibi). Bu hızda, indirmeler uzun zaman alır ve sorun web tarayıcısını kullanırken ortaya çıkar. Firefox: yüklenmesi uzun zaman alıyor.

İnternete bağlandığımda, aktarım yükleme ve indirme süresi sınırlarını etkinleştiriyorum ve Firefox'un yüklenmesini bekliyorum, ardından torrentleri yeniden başlatıyorum. Göreceğiniz gibi, bunu birkaç kez yapmak sıkıcı. Bazen tüm torrentleri tamamen duraklattığım ve ardından tekrar etkinleştirmeyi unuttuğumdan bahsetmiyorum bile, bu da torrentleri yüklemek / indirmek için değerli zaman kaybına neden oluyor.

Çözüm
Bu problem için Bash'de temelde aşağıdakileri yapan bir komut dosyası oluşturmaya karar verdim:

1. İletimin çalıştığını ve hiçbir torrentin duraklatılmadığını kontrol edin. Eğer öyleyse, selleri tekrar açın.

2. Firefox'un çalıştığını doğrulayın. Daha sonra gönderilen ve alınan KB / ları alır ve bir dosyaya kaydeder.

3. Tarayıcı yükleme / indirme KB / s değeri bir referans aralığını aşarsa, İletim yükleme / indirme ayarları değiştirilir.

Bu, bir web sayfasına erişmek istendiğinde, tarayıcı isteği gönderdiğinde, aktarım dosyası yüklemesinin sınırlandırılmasına ve sayfa verileri alındığında indirmenin sınırlandırılmasına izin verir. Bu, aynı anda birden fazla sayfaya erişirken harika çalışıyor ve sonuçlar aslında İletim devre dışı bırakıldığında olduğu gibi aynı.

En büyük avantajı, tamamen otomatik olması ve benim müdahalemi gerektirmemesidir.

Senaryo
Herhangi bir uygulamanın bant genişliği tüketimini kontrol etmek için kullanılabilmesine rağmen, şu anda yalnızca çok özel bir sorunu çözmek için yazılmıştır. Ancak değişiklik yapmak çok zor değil.

Gereksinimleri
Düzgün çalışması için başvuruya sahip olmak gerekiyor «Nethogs'.

Bu durumda komut dosyası Firefox ve Transmission ile çalıştığından, torrentlerin karşıya yükleme ve indirme değerlerini değiştiren "uzaktan iletim" özelliğine ek olarak bu uygulamaların kurulu olması gerekir. Ayrıca "awk" komut dosyasında da kullanıyorum. Bundan bahsediyorum çünkü tüm dağıtımların yüklü olup olmadığını bilmiyorum.

Kullanılan yazılım
Komut dosyasının kullandığı uygulamaların ve çalıştığı sistemin listesi.

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

Infaz
Kök olarak çalıştırılmalıdır çünkü Nethogs yalnızca bu kullanıcıyla çalıştırılabilir, ancak uzaktan iletim normal kullanıcı ile komut aracılığıyla yürütülür su.

Komut dosyası, dahili Bash komutunu kullanır tuzak SIGINT (CTRL + c) veya SIGTERM sinyalleri aracılığıyla durdurulduğunda, varsayılan aktarım yükleme / indirme değerlerini geri yüklemek mümkündür.

Yine de başlangıçta nasıl çalıştırılacağından ve bilgisayarı kapattığımda veya yeniden başlattığımda nasıl duracağından emin değilim. Dosyaya bir bağlantı koymayı düşünüyordum /etc/rc.local ama işe yarayıp yaramayacağını bilmiyorum ve / etc / nasıl çalıştığını gerçekten anlamıyoruminit.d. (Orada olan bazı senaryolar gördüm. iskeletama onları anlamıyorum). Bana yardım edebilecek biri varsa çok minnettar olacağım.

Pekala millet, işte bu. Umarım benim küçük katkım size yararlıdır ve dilerseniz onu geliştirebilirsiniz. Dosyayla ilgili güvenlik sorunları olması durumunda görüşlerinizi ve önerilerinizi ve önerilerinizi okumaktan memnuniyet duyarım (programcı değilim, sadece zaman zaman birkaç şey yapıyorum).

Bazı düzeltmelerle gelecekte harika bir uygulama haline gelebileceğini biliyorum, çünkü aynı şeyi yapan herhangi bir program bilmiyorum. Örneğin, bir grafik arayüze sahip olabileceğimi düşünüyorum. zenite bant genişliği kullanımında önceliklendirmek istediğimiz uygulamaları (web tarayıcısı, güncelleme yöneticisi, dosya aktarımı vb.) ve farklı referans değerlerini seçebilme. Evet, biraz iddialı ama oldukça kullanışlı.

Komut dosyasını şuradan indirebilirsiniz: makarna. Okuduğunuz için çok teşekkürler !!


Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.

  1.   ela dijo

    Oh! İlginç 😀

    1.    eliotime3000 dijo

      Sol alt köşede, İletimin hem karşıya yükleme hem de indirme sırasında tükettiği bant genişliğini sınırlama seçeneğiniz vardır. İletim ile herhangi bir sorun yaşamadım.

      1.    kurabiye dijo

        Ancak bu otomatiktir ve grafik arayüzü olmayan bir İletim de vardır, bu nedenle bu işlevi elinizin altında olmayabilir.

      2.    Joaquin dijo

        Merhaba nasılsın.
        Evet bunu zaten biliyorum. Ama tam olarak yapmak istemediğim şey bu.
        Çok zayıf bir internet planım var (512KB ve bölgemdeki en iyisi).

        Senaryomla, her şeyi elle yapmak konusunda endişelenmiyorum. Tarayıcıda bir sayfa açtığınızı ve İletimin o anda tüm bant genişliğini kapladığını ve bu nedenle sayfanın yüklenmesi biraz zaman alır (en fazla 1 ′, ancak sinir bozucu). Her iki dakikada bir "zaman sınırlarını etkinleştirmekten" bıktım. Bu otomatiktir ve neredeyse anında gerçekleşir (Firefox tarafından gönderilen ve alınan KB'yi her 5 saniyede bir kontrol eder).

        Gerçekten benim durumumda bu internet hızıyla mükemmel. Ayrıca bunu yapan başka bir uygulama bilmiyorum, aksi halde yapmazdı. Gördüklerim sadece bant genişliğini sınırlıyor, ancak otomatik olarak değil.

        Umarım açıkımdır. Okuduğunuz için teşekkürler!

        1.    Joaquin dijo

          Üzgünüm yanılmışım. 512KB değiller, daha çok Kbitler. (Yani 1/2 "Mega"). İndirebileceğim maksimum 75KB / s ve 50KB / s yüklemedir. Bu, İnternet iyi olduğunda, aksi takdirde normal 48 ve 23'tür.

    2.    Joaquin dijo

      Teşekkürler!

  2.   kurabiye dijo

    İlginç, qBittorrent kullanıyorum ve anahtarı limitler için kullanıyorum.

    Gönderi bu renklerle güzel görünüyor 😉

    1.    Joaquin dijo

      Renkler için teşekkürler. Bunda pek iyi değilim, çok fazla metinle çok uzun ve monoton görünüyor.

  3.   jorge dijo

    Şahsen, canlı uygulama sekmesi ile transmisyon-arka plan programı ve firefox kullanıyorum, bu yüzden harici programlarla dolaşmıyorum veya torrentleri veya aktif kaplumbağayı sürdürmeyi unutmuyorum (ve telefonumdan kontrol edebilirim). Bir hizmeti başlatmak için, bir kullanıcı ekleyin (örneğin: adduser –disabled-password nethogs), /etc/init.d'de bir isimle (örneğin: nethogs-daemon) ve sonra debian türünde "update" ile arka plan programı için bir metin dosyası oluşturun -rc.d nethogs-daemon defaults "kendiliğinden başlamasını sağlar.

    Metin dosyası da bir bash betiğidir ve betiğinizi.
    Bunun size yardımcı olup olamayacağına bakın, iletimi başlatmak için kullanılabilir, nethogları başlatmak için kullanılabilir. https://trac.transmissionbt.com/wiki/Scripts/initd

    1.    Joaquin dijo

      Merhaba!
      Bakalım anlayıp anlamadım: bu, başlangıçta İletimi başlatmak ve kapatırken veya yeniden başlatırken durdurmaktır. Bununla birlikte, her zaman kendi kendine başladığından ve indirmeye başladığından hiçbir sorun yaşamıyorum (Xfce'de başlangıçta uygulamalara ekledim).

      Benim sorunum, eğer betiği rc.local veya init.d içine yerleştirirken, bilgisayarın betiği nasıl durdurduğunu bilmiyorsam. Açıkçası, PC'yi kapatırken / yeniden başlatırken, tüm işlemler sonlandırılır (ve bunlarla birlikte Transmission ve Nethogs da), ancak betiğime ne olacağını bilmiyorum.

      Ve bu beni neden rahatsız ediyor? Komut dosyası / tmp içinde bir dosya oluşturur ve İletim hızını kontrol eder. Bir terminalde çalıştırırsam ve aniden durdurursam (örneğin CTRL + c ile), komut dosyası kapatmadan önce varsayılan hızları (gerekirse) geri yükler ve sonra Nethogs'u durdurur ve dosyayı / tmp'den siler. Herhangi bir gevşek dosya veya arka plan işlemi bırakmaması için mümkün olduğunca "profesyonel" yapmaya çalıştım.

      Söyledikleriniz hakkında, "canlı uygulama sekmesinin" ne olduğunu anlamadım.

      1.    jorge dijo

        Uygulama sekmesi kalıcı bir sekmedir, her zaman açıktır ve firefox içinde küçültülmüştür http://i.imgur.com/a5i0aP3.png (sekmedeki bağlamsal menü, «sekmeyi yapıştır» a tıklayın). Arka plan sunucuları TERM sinyali gönderdiklerinde, oturumu kapatana kadar bir süre beklerler ve verilerini kaydederler. Daha önce komut dosyasından çıkarken verdiğim bağlantıda start-stop-daemon çağırıp iletimin durmasını söylediğine dikkat edin, buraya "killall nethogs" ve içerdiği StopScript'i yapıştırabilirsiniz. Bu durumda init betiğini, ayrıcalıklara ihtiyacı olduğu için belirli bir kullanıcı yerine root olarak adlandırmanız gerekir.

        1.    Joaquin dijo

          Bahşiş için teşekkürler. Vaktim olur olmaz denerim!

  4.   Facundo dijo

    harika, bu rahatsızlığa rastladım, çünkü hızlı bir bağlantınız olsa bile, internette gezinmek ve dolayısıyla "boşa harcamak" istediğinizde iletimi sınırlandırmak zorunda kalıyorsunuz.
    Elimden geldiğince deneyeceğim. Selamlar ve teşekkürler !!

    1.    Joaquin dijo

      Sayende! Umarım bu size yardımcı olabilir!

      1.    facundo dijo

        Tekrar merhaba Joaquin. Görüyorum ki tüm yorumlara cevap vermeye özen gösteriyorsunuz, bu yüzden bundan yararlanacağım ve size birkaç çaylak soru soracağım.
        İlk olarak, "awk" komut dosyasının kurulu olup olmadığını nasıl anlarım? Debian 7.2 kullanıyorum.
        İkincisi, yapıştırma kodunu ne yapacağımı bilmiyorum. Bir metin editörü alıp "bandwidth-controller.sh" adlı bir dosyaya kaydetmem ve sonra onu "./band-width-controller.sh" olarak çalıştırmam gerekiyor. Bu benim en çok kaybolduğum kısım.
        Üçüncüsü: Root olarak çalıştır dediğinizde kullanıcıdan root'a geçmek gerekli midir yoksa sudo ile yeterli mi?

        Bu konuda bana tavsiye verecek herhangi bir okumanız varsa, minnettarım.
        Selamlar!

  5.   Giskard dijo

    Bu yüzden her zaman Transmission'u kaldırıyorum ve Deluge'u kuruyorum. Peki, bunun için ve Deluge'nin bana sunduğu, diğerinin getirmediği biraz daha fazla şey için.

    1.    Joaquin dijo

      Merhaba, Deluge bilmiyorum. Benim asıl sorunum internet hizmeti. Bununla sonuna kadar sıkıştırıyorum.

  6.   panda dijo

    Selam. bant genişliğim de sınırlı olduğundan bu betiği denedim. Ama işe yaramıyor. hata nethogs -t komutunda görünüyor. "İlk paketin gelmesi bekleniyor (bkz. sourceforge.net hatası 1019381)" nane, archlinux ve hiçbir şey denedim. Bu komutun geri dönmesi gereken nedir? Her uygulama tarafından kullanılan bant genişliğini düz metin olarak yazdırmam gerektiğini düşünüyorum. Ağı dinlemenize izin veren başka bir program biliyor musunuz?

    1.    Joaquin dijo

      Merhaba nasılsın.
      Bu bir Nethogs böceği. Bana da öyle geliyor, ama yine de çalışıyor.

      Nethogs'un yaptığı şey, gerçek zamanlı olarak en fazla bant genişliğini tüketen süreçleri göstermektir. Komut dosyasında, çıktısı daha sonra filtrelenebilmesi için "net.list" metin dosyasına kaydedilir.

      Komut dosyası yalnızca Transmission (bir BitTorrent istemcisi) ve Firefox (web tarayıcısı) ile çalışır. Yaptığı şey, Firefox bir web sayfasını yüklerken Transmission'ın bant genişliğini sınırlamaktır. Kurmanız gerekenler: Nethogs, Transmission, Transmission-remote ve Firefox.

      Hepsi gönderide açıklandığı için sorunun ne olduğunu bilmiyorum.

      Not: Lütfen doğru yazınız ve yazımınızı geliştiriniz. Bu bir yorumdur, metin mesajı değildir.

      1.    panda dijo

        senaryo benim için çalışmıyor. bu hata mesajını birçok kez yazdırır. Bir terminalde "nethogs -t" komutunu çalıştırıp ne yaptığını görün, ancak hiçbir şey yazdırmaz, yalnızca hatayı yazdırır. benim bilgisayarımda çalışmıyor. İşlemleri ve bant genişliğini gösteren -t olmadan çalıştırıldığında yazdırdığına benzer bir şey yazdırması gerektiğini düşünüyorum. ama benim durumumda bunların hiçbirini basmıyor. senaryoyu geliştirmek için hangi dağıtımı kullandınız?

        1.    Joaquin dijo

          Yakından bakarsanız, gönderi kullanılan tüm yazılımları ve sürümlerini içerir. Hatanın nedenini bilmiyorum, ama her "nethogs -t" çalıştırıldığında bana öyle geliyor. Komut dosyasında her 2 ″'de bir gerçekleşecek.

          Nethogları çalıştırdığınızda, ağı kullanan bir işlem yoktur ve bu nedenle herhangi bir çıktı alamazsınız.

          Komut dosyası root olarak çalıştırılmalıdır çünkü nethogs bu kullanıcıya ihtiyaç duyar.

          şimdi önemli bir şeyi hatırladım ve neden senin için işe yaramadığını biliyorum:

          Komut dosyasını DÜZENLEMELİSİNİZ ve normal kullanıcının adını değiştirmelisiniz. Komut dosyasında buna "joaquin" denir. Kullanıcı adınız ile değiştirmelisiniz.

          Üzgünüm farkında değildim, adı bir değişkene koymalıydım. Mesele şu ki, bu kadar genel yapmayı düşünmedim, sadece size göstermek istedim, böylece siz görebilirsiniz ve isteyenler nasıl yapılacağına dair fikir edinebilir. Bunu herhangi bir bilgisayarda çalışması niyetiyle yapmadım, bu zaman alıyor ve nasıl programlanacağını bilmiyorum, başıma bir şeyler geliyor.

          İyi şanslar, her şey tekrar sorar. Ve lütfen komut dosyasının gönderisini ve yorumlarını tekrar okuyun.

  7.   facundo dijo

    Merhaba Joaquín, bana şunu söyle:

    uzaktan iletim: (http://localhost:9091/transmission/rpc/) Sunucuya bağlanılamadı
    ioctl, seçilen aygıt eth0 için yerel IP kurulurken başarısız oldu. Cihazı komut satırında belirtebilirsiniz.

    herhangi bir fikir?? Teşekkürler!

    1.    Joaquin dijo

      Merhaba nasılsın.
      Affedersiniz ama hiçbir fikrim yok 😀
      Anladığım kadarıyla hata diyor ki, bu ioctl ile ilgili bir sorun, ama bunun ne olduğunu bilmiyorum.

      Belki betiği durdurmayı ve iletim-uzaktan kumandanın bazı seçenekleriyle çalışıp çalışmadığını görmeyi deneyebilirsiniz ("man" komutuyla man sayfasını okuyun).