Sziasztok.
Van egy Sinatrában megírt webalkalmazás, aminek időnként más oldalakról kell pdf doksikat letölteni.
Ehhez a Watir gem-et használom az alábbi módon:
profile = Selenium::WebDriver::Firefox::Profile.new
profile['browser.download.dir'] = workdir
profile['browser.download.folderList'] = 2
profile['browser.helperApps.neverAsk.saveToDisk'] = 'application/pdf'
profile["pdfjs.disabled"] = true
profile["pdfjs.firstRun"] = false
browser = Watir::Browser.new :firefox, headless: true, options: {profile: profile}
url_list.each do |url|
browser.goto url
browser.execute_script 'AdatBetolto()'
browser.button(id: 'PDFLetoltes').wait_until(&:enabled?).click
end
while ( Dir["#{workdir}/*.crdownload"].count>0 || Dir["#{workdir}/*.pdf"].count<documents.count) do
sleep 0.3
end
browser.close
Az egész egy Alpine Linuxból összerakott docker konténerben fut.
Mivel a chromium + chromium-chromedriver gyakran kifagyott, ezért firefox + geckodriver párost tettem fel.
Ahol fejlesztettem, (natív vason futó Debian 10.13, docker-ce 20.10.18, zfs) minden rendben ment.
Az éles rendszerben (xen-ben futó Debian 11.5, docker.io 20.10.5, overlayfs) viszont sajnos százával gyűlnek fel WebExtension és Web Content nevű zombi processzek, ami miatt kénytelen vagyok rendszeresen újraindítani a konténert.
/ # ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.2 1.4 197768 119968 ? Ssl 21:06 0:04 /usr/local/bin/ruby /www/main.rb
root 76 0.2 0.0 0 0 ? Z 21:36 0:01 [Web Content] <defunct>
root 96 0.1 0.0 0 0 ? Z 21:36 0:00 [WebExtensions] <defunct>
root 164 0.0 0.0 0 0 ? Z 21:36 0:00 [Web Content] <defunct>
root 254 0.3 0.0 0 0 ? Z 21:38 0:01 [Web Content] <defunct>
root 277 0.1 0.0 0 0 ? Z 21:38 0:00 [WebExtensions] <defunct>
root 337 0.0 0.0 0 0 ? Z 21:38 0:00 [Web Content] <defunct>
root 369 0.0 0.0 1664 1056 pts/0 Ss 21:41 0:00 /bin/sh
root 383 0.0 0.0 1708 828 pts/0 R+ 21:44 0:00 ps aux
/ # pstree -p
ruby(1)-+-Web Content(76)
|-Web Content(164)
|-Web Content(254)
|-Web Content(337)
|-WebExtensions(96)
|-WebExtensions(277)
|-{background_thr*}(7)
|-{background_thr*}(8)
|-{background_thr*}(10)
`-{utils.rb:158}(12)
Az éles rendszer kialakítására sajnos nincs ráhatásom, én csak a docker image-et adom.
Ettől függetlenül meglepne, ha a két hosting rendszer közötti különbség ilyen szinten beleszólna a konténer működésébe.
Mit lehetne még szoftver oldalról tenni, hogy ne szaporodjanak a zombik?
- 55 megtekintés
Hozzászólások
Egy szimpla http letöltéshez miért kell böngésző?
- A hozzászóláshoz be kell jelentkezni
Azért mert előbb le kell futnia az oldalon egy rakás JavaScript kódnak. Még maga a "letöltés" gomb se submit, csak egy button, amire rá van kötve egy onClick függvény, ami majd valahogy/valamikor tol egy POST-ot, amiből generálódik a pdf.
- A hozzászóláshoz be kell jelentkezni
-- Törölve. Dupla.
- A hozzászóláshoz be kell jelentkezni