ເລືອກພຣັອກຊີພາຍໃນແຕ່ລະວຽກ xargs
ດຳເນີນການເລືອກແບບສຸ່ມໃນເຊວລູກ ເພື່ອໃຫ້ແຕ່ລະວຽກ curl ທີ່ເຮັດພ້ອມກັນໄດ້ພຣັອກຊີຈາກລາຍການ.
ໃສ່ການເລືອກແບບສຸ່ມໄວ້ພາຍໃນເຊວທີ່ເລີ່ມສຳລັບແຕ່ລະວຽກ. ການຂະຫຍາຍການແທນຄຳສັ່ງໃນເຊວພາຍນອກຈະເລືອກຄ່າກ່ອນທີ່ xargs ຈະເລີ່ມວຽກຂອງມັນ.
ດ້ວຍ proxies.txt ທີ່ກວດສອບແລ້ວ ມີພຣັອກຊີ URL ໜຶ່ງຕໍ່ແຖວ, ຜູ້ສະໝັກສາທາລະນະສາມາດມາຈາກລາຍການພຣັອກຊີຟຣີ; ຈັດຮູບແບບແຕ່ລະລາຍການດ້ວຍໂປຣໂຕຄອນທີ່ curl ຮອງຮັບ:
printf '%s\0' 'https://a.example/one' 'https://b.example/two' |
xargs -0 -n 1 -P 4 sh -c '
proxy=$(shuf -n 1 proxies.txt) || exit 1
[ -n "$proxy" ] || exit 1
curl --fail --silent --show-error --max-time 30 \
--proxy "$proxy" --noproxy "" --output /dev/null "$1"
' _
-n 1 ໃຫ້ URL ໜຶ່ງແກ່ແຕ່ລະຄຳສັ່ງ, ແລະ -P 4 ອະນຸຍາດໃຫ້ສູງສຸດສີ່ຄຳສັ່ງໃນເວລາດຽວກັນ. ຂໍ້ມູນເຂົ້າທີ່ແຍກດ້ວຍສູນຮັກສາ URL ໄວ້ເປັນອາກູເມັນດຽວ. ເສັ້ນລຸ່ມຍຶດຕຳແໜ່ງ $0 ຂອງ sh, ປ່ອຍ URL ໄວ້ໃນ $1.
ເຊວລູກແຕ່ລະອັນດຳເນີນການ shuf ຢ່າງເປັນເອກະລາດ. ການເລືອກແບບສຸ່ມອາດເລືອກພຣັອກຊີດຽວກັນຫຼາຍກວ່າໜຶ່ງເທື່ອ; ມັນບໍ່ແມ່ນການຈັດຕາຕະລາງແບບວຽນລຳດັບ ແລະ ບໍ່ແມ່ນການຮັບປະກັນທີ່ຢູ່ອອກທີ່ແຕກຕ່າງ.
ລາຍການຂ້າມທີ່ຫວ່າງເປົ່າຢ່າງຊັດເຈນປ້ອງກັນບໍ່ໃຫ້ການຕັ້ງຄ່າ no_proxy ທີ່ຮັບມະລະດົກຂ້າມຕົວກາງທີ່ເລືອກ. ຕົວຢ່າງຖິ້ມເນື້ອຫາຄຳຕອບ; ໃຊ້ເສັ້ນທາງຜົນອອກແຍກຕ່າງຫາກເມື່ອບັນທຶກການດາວໂຫຼດພ້ອມກັນ.