- Ang QSH o Qshell ay ang IBM i POSIX command interpreter na isinama sa PASE environment.
- Pinapayagan nito ang pagsasama-sama ng mga utos na parang Unix sa CL upang i-automate ang mga gawain sa IFS.
- Sinusuportahan nito ang mga script na may mga parameter ($0, $1, set, shift) na nagpapadali sa advanced automation.
- Ito ay may kaugnayan sa mga kapaligirang Java at WebSphere, kung saan kritikal ang heap configuration.
Kung gagamit ka ng IBM i (ang lumang AS/400), malao't madali ay makakatagpo ka ng QSH o Qshell, ang command interpreter na parang Unix na kasama na sa sistema. Maraming tao ang nakakita na nito nang paminsan-minsan, lalo na kapag nakikitungo sa mga gawain ng IFS o WebSphere, ngunit hindi laging malinaw kung ano talaga ito o kung ano ang mga kakayahan nito.
Sa artikulong ito, mahinahon naming susuriin kung ano ang QSH/Qshell, kung para saan ito ginagamit sa IBM i, at kung paano ito makakatulong sa iyo sa parehong task automation (halimbawa, paglilista ng mga file sa IFS at pagsulat ng mga ito sa isang pisikal na file) at mas kumplikadong mga senaryo na kinasasangkutan ng Java, WebSphere, o kahit na ang iSeries Access para sa Web. Gagamit kami ng malinaw at madaling maunawaang wika, iniiwasan ang mga hindi kinakailangang teoretikal na jargon, ngunit susuriin namin ang mga teknikal na detalye upang matiyak na talagang kapaki-pakinabang ito para sa iyo.
Ano ang QSH o Qshell sa IBM i?
Kapag pinag-uusapan natin ang QSH o Qshell, tinutukoy natin ang POSIX-compliant shell interpreter na kasama ng IBM sa IBM i . Sa madaling salita, ito ay isang "Unix-style shell" na nasa loob ng system at nagbibigay-daan sa iyong magpatakbo ng mga command na halos kapareho ng mga gagamitin mo sa Linux (tulad ng ls , cd , atbp.) sa IBM i environment.
Ang environment na ito ay bahagi ng tinatawag ng IBM na i5/OS PASE (Portable Application Solutions Environment) , isang layer na nagbibigay ng mga utility at program na tugma sa mga pamantayan ng POSIX at X/Open. Dahil sa PASE, ang Qshell ay maaaring mag-alok ng isang medyo komprehensibong hanay ng mga tool na gumagana nang halos kapareho ng makikita mo sa isang klasikong Unix system.
Sa pagsasagawa, ang Qshell ay nagsisilbing tulay sa pagitan ng tradisyonal na mundo ng IBM (mga library, pisikal na file, CL) at ng mas "moderno" o bukas na mundo ng mga direktoryo, mga path ng IFS, at mga utos na istilo-Unix. Nagbubukas ito ng pinto sa mga napaka-flexible na solusyon, lalo na kapag hinahalo mo ang mga utos ng shell sa mga programang CL o RPG.
Mahalagang maunawaan na ang Qshell ay hindi isang laruan o isang bagong bagay: ito ay malalim na naka-integrate sa IBM i at umaasa sa mga API ng system . Sa katunayan, maraming IBM i.o. utilities at mga kaugnay na produkto (tulad ng WebSphere o Java tools) ang tumatakbo sa ibabaw ng PASE, na ginagamit ang parehong ecosystem na iyon.
QSH sa loob ng kapaligirang i5/OS PASS
Ang kapaligirang PASE ang responsable sa pagbibigay ng mga programa sa IBM i na sumusunod sa mga pamantayan ng POSIX at X/Open . Ang Qshell, bilang isang interpreter ng POSIX, ay bahagi ng suite na ito at nakikinabang mula sa lahat ng mga library at tool na iniaalok ng PASE.
Kapag sinimulan mo ang Qshell, inilulunsad mo ang isang interpreter na nagpapatakbo ng mga command at programa na parang nasa isang maliit na Unix environment sa loob ng isang IBM i . Kabilang dito ang mga pangunahing bagay tulad ng pagtatrabaho sa mga IFS path gamit ang "/directory/subdirectory", gamit ang mga pipe, redirect, at mga simpleng script.
Ang IBM ay nagpapanatili ng medyo komprehensibong dokumentasyon tungkol sa Qshell at PASE sa IBM Knowledge Center nito . Kung gusto mong makita ang lahat ng posibilidad, mga opsyon sa command, at mga partikular na feature depende sa bersyon ng system (halimbawa, V6.1), pinakamahusay na sumangguni sa manwal para sa eksaktong bersyon ng IBM na iyong na-install.
Bukod pa rito, sakop din ng environment na ito ang lahat ng bagay na may kaugnayan sa Java, mga application server tulad ng WebSphere, at mga kaugnay na utility. Kadalasan, kapag nakakakita ka ng mga mensahe ng error o babala na may kaugnayan sa QSH0006 o QSH0007 , ang mga pinagbabatayang isyu ay nangyayari sa PASE o Java na nakakaapekto sa operasyon ng shell o sa mga prosesong inilulunsad nito.
Praktikal na halimbawa: paglilista ng mga IFS file gamit ang QSH at CL
Isa sa mga pinaka-praktikal (at karaniwang) gamit ng Qshell sa mga totoong kapaligiran ng IBM i ay ang pakikipagtulungan sa IFS upang ilista ang mga file at i-dump ang impormasyong iyon sa isang pisikal na file na maaari nating iproseso mula sa CL, RPG o iba pang mga programa.
Isipin na mayroon kang isang IFS folder, halimbawa /FTP , kung saan nakaimbak ang mga file na may extension na .cbs . Gusto mong makuha, sa isang pisikal na library file, ang isang kumpletong listahan ng lahat ng mga file na iyon, kabilang ang mga nasa mga subdirectory, para maproseso mo ang mga ito isa-isa sa ibang pagkakataon.
Isang napakasimpleng paraan para gawin ito ay sa pamamagitan ng pagsasama-sama ng ilang CL statements na may Qshell command na gumagamit ng `ls -R` command para maglista nang recursively. Ang ideya ay:
1. Gumawa ng pisikal na file kung saan mo ise-save ang resulta:
CRTPF FILE(LIBRIUM/ARCHIVE) RCDLEN(1024)
Lumilikha ito ng isang file na may sapat na malaking record (halimbawa, 1024 bytes ang haba ) kung saan ang bawat linyang ibinalik ng utos na `ls` na inilunsad ng Qshell ay itatago. Kung umiiral na ang file, maaari mong pangasiwaan ang error gamit ang isang ` MONMSG` upang maiwasan ang pag-crash ng proseso.
Pagkatapos ay maaari mong idagdag:
MONMSG MSGID(CPF0000)
Sa ganitong paraan, kung sakaling mabigo ang paglikha ng file sa anumang kadahilanan , makukuha mo ang pangkalahatang mensahe at makapagpapasya kung ano ang gagawin (bagaman sa pangunahing halimbawa, ang problema ay binabalewala lamang).
Ang susunod na hakbang ay ang pagtatalaga ng utos na gusto mong isagawa sa Qshell sa isang CL variable. Ganito ang hitsura:
2. Ihanda ang utos ng shell na gusto mong patakbuhin , halimbawa:
CHGVAR VAR(&CMD) VALUE('ls -R /FTP/*.cbs > /qsys.lib/libreria.lib/archivo.file/archivo.mbr')
Dito nagiging interesante: sinasabi mo sa system na patakbuhin ang `ls -R` sa path na ` /FTP` para ilista ang lahat ng file na tumutugma sa pattern na `*.cbs` , at ire-redirect mo rin ang standard output sa miyembro ng `ARCHIVO` ng pisikal na file na ` LIBRERIA/ARCHIVO` gamit ang IFS syntax na `/qsys.lib/ ...`. Sa ganitong paraan, pinangangasiwaan ng Qshell ang pag-compile ng listahan at ang direktang pagsusulat nito sa pisikal na file.
Kapag natukoy na ang utos, ang natitira na lang ay patakbuhin ito sa loob ng Qshell:
3. Isagawa ang utos sa Qshell gamit ang:
STRQSH CMD(&CMD)
Ang utos na STRQSH ay nagsisimula ng isang sesyon ng Qshell at isinasagawa ang mga nilalaman ng variable na &CMD . Mula sa pananaw ng isang gumagamit ng CL, ito ay isang maginhawang paraan upang "buksan" ang mundo ng POSIX nang ilang sandali, matapos ang trabaho, at bumalik sa CL.
Panghuli, maaari mong hawakan ang mga potensyal na error na itinatapon ng Qshell gamit ang isang bagay tulad ng:
MONMSG MSGID(CPF0000 QSH0006 QSH0007) EXEC(DO)
(PAGHAHANDA NG ERROR)
ENDDO
Sa ganitong paraan, kung may mangyari na pangkaraniwang problema sa sistema ( CPF0000 ) o isa sa mga tipikal na error sa Qshell ( QSH0006, QSH0007 ), maglalagay ka ng error handling block kung saan maaari mong, halimbawa, i-log ang pagkabigo, magpadala ng mensahe sa operator, o gumawa ng mga desisyon batay sa ibinalik na code.
Kung magiging maayos ang lahat, nai-save na ng Qshell interpreter ang kumpletong listahan ng mga .cbs file na natagpuan nito sa pisikal na file na LIBRERIA/ARCHIVO , isang listahan na maaari mong iproseso mula sa ibang CL o RPG program. Ipinapakita ng pamamaraang ito kung gaano kabisa ang pagsasama ng tradisyonal na CL sa mga utos ng Qshell para sa mga partikular na gawain na kung hindi man ay magiging mas mahirap.
Mga posibilidad at kapangyarihan ng Qshell na lampas sa halimbawa
Ang nakaraang halimbawa ay panimula pa lamang: Tinatanggap ng Qshell ang maraming parameter at command , kapwa ang sarili nito at ang mga minana mula sa mundo ng Unix. Sa kaso ng `ls` , maaari kang mag-eksperimento sa mga opsyon tulad ng `-R` para sa recursion, paglilista ng mga format, mga filter, at iba pa. Ngunit iyon lamang ang pinakanakikitang bahagi.
Sa pangkalahatan, pinapayagan ka ng Qshell na bumuo ng magaan at madaling gamiting solusyon sa mga pang-araw-araw na problema : paglipat ng mga file sa IFS, pagbuo ng mga listahan, pagsasama-sama ng mga output gamit ang mga pipe, pag-automate ng maliliit na gawain sa pagpapanatili, o maging ang pagsisilbing tagapamagitan sa pagitan ng mga proseso ng batch at mga panlabas na aplikasyon.
Isang malaking bentahe ay maaari mong gamitin ang Qshell mula sa CL (gamit ang STRQSH) , ihalo ito sa mga utos ng system, at panatilihin ang pangunahing lohika sa mga programa ng IBM i, habang itinatalaga sa shell ang mga operasyong istilo-Unix na mas maginhawang i-type doon.
Kung kailangan mong suriin nang mas malalim ang lahat ng magagamit na opsyon, nag-aalok ang IBM ng mga partikular na dokumentasyon para sa bawat bersyon ng system. Halimbawa, sa IBM Knowledge Center para sa bersyon 6.1, makikita mo ang mga detalye ng bawat command, mga parameter nito, mga halimbawa ng paggamit, at mga tala ng compatibility. Sa isip, dapat mong konsultahin ang mapagkukunang ito upang matuklasan ang mga bagong utility na maaaring na-install mo na ngunit hindi mo ginagamit.
Dapat tandaan na ang Qshell ay hindi lamang ang opsyon sa kapaligirang mala-Unix sa IBM i (nariyan din ang kapaligirang QP2TERM at ang mas "purong" suporta sa PASE), ngunit isa ito sa mga pinaka-naa-access para sa mga administrador at developer na nagmumula sa mundo ng CL o RPG na gustong simulan ang paggamit ng mga tool ng IFS at POSIX nang walang masyadong komplikasyon.
Pagsulat ng mga script at parameter sa Qshell
Bukod sa pag-isyu ng mga indibidwal na utos, hinahayaan ka rin ng Qshell na magsulat ng sarili mong mga script na kumikilos nang katulad ng sa isang klasikong shell. Ang mga script na ito ay maaaring tumanggap ng mga parameter, gumamit ng mga variable, at dynamic na bumuo ng mga utos, na nagbibigay-daan sa iyong i-automate ang mga paulit-ulit na gawain nang hindi muling isinusulat ang code sa bawat oras.
Sa isang Qshell script, ang mga argumentong natatanggap nito ay itinatalaga sa mga espesyal na variable: $1 para sa unang parameter, $2 para sa pangalawa, at iba pa hanggang sa maximum na 255 parameter . Nangangahulugan ito na kapag nagpatakbo ka ng script na nagpapasa ng maraming value, magagamit mo ang mga ito sa loob mismo ng script upang bumuo ng mga path, filename, o anumang bagay na kailangan mo.
Halimbawa, maaari kang magkaroon ng script na tumatanggap ng pangalan ng isang command na isasagawa bilang unang parameter nito at ipinapakita ito bago patakbuhin ang command. Isang bagay na kasing simple ng:
echo $ 1
Isinasagawa ng $1 # ang utos na nakapaloob sa unang parameter
Inilalarawan ng maliit na halimbawang ito kung paano maaaring magsilbing "wrapper" ang isang script para sa iba pang mga utos , na nagdaragdag ng karagdagang lohika (hal., mga pagpapatunay o mga bakas) bago isagawa ang aktwal na utos.
Para magtalaga ng mga halaga sa mga parameter sa loob ng script, maaari mong gamitin ang utos na `set` . Halimbawa:
itakda ang v1 v2 # italaga ang v1 sa $1 at ang v2 sa $2
Sa ganitong paraan, nang hindi na kailangang tawagin muli ang script mula sa labas, maaari mong muling ayusin ang mga halagang hahawakan mo sa loob. Ito ay kapaki-pakinabang kapag gusto mo, halimbawa, muling tukuyin ang pagkakasunud-sunod ng mga argumento o maghanda ng mga default na halaga.
Isa pang kawili-wiling utos ay ang `shift` , na naglilipat ng mga parameter pakaliwa: nawawala ang `$1`, nagiging `$1` ang `$2`, nagiging `$2` ang `$3` , at iba pa. Ito ay isang klasikong pamamaraan ng scripting para sa pag-ulit-ulit sa mga listahan ng mga argumento nang paisa-isa, inaalis ang una sa bawat oras na iproseso mo ito.
Bukod pa rito, mayroon kang variable na $0 , na naglalaman ng pangalan mismo ng script. Halimbawa, pinapayagan ka nitong magpakita ng mga mensahe ng tulong na kinabibilangan ng aktwal na pangalan ng script nang hindi kinakailangang manu-manong i-type ito, o iakma ang gawi depende sa kung paano ito ginamit.
Kung pagsasama-samahin, ang mga posibilidad na ito ay ginagawang isang napaka-flexible na tool ang Qshell para sa pag-set up ng maliliit na automation na gumagana sa IFS, pagtawag sa mga command ng system, o pagsasama ng mga proseso ng IBM i sa mga panlabas na application.
Ang kaugnayan ng Qshell sa WebSphere, Java, at paggamit ng memorya
Bagama't ang Qshell ay kadalasang nakikita lamang bilang isang command interpreter para sa IFS, sa pang-araw-araw na paggamit sa IBM i, malapit din itong nauugnay sa Java environment at mga application server tulad ng WebSphere . Ito ay lalong kapansin-pansin kapag nagsisimulang lumitaw ang mga mensahe ng system na may kaugnayan sa Java memory o paggamit ng heap.
Sa mga kapaligiran kung saan ginagamit ang iSeries Access for Web (IWA) , na naka-deploy sa WebSphere (halimbawa, WAS 6.1), karaniwan nang makatagpo ng mga mensahe tulad ng:
GINAMIT NG JAVA ANG 95% NG GC HEAP.
GAMIT NA SUKAT NG BUNTOT(KB) AT MAX HEAP(KB): 249049 262144.
Ang mga ganitong uri ng babala ay karaniwang nagmumula sa WebSphere server (hindi direkta mula sa Qshell), ngunit maaaring may kasamang mga mensahe ang mga ito na may kaugnayan sa PASE o mga prosesong inilunsad mula o papunta sa Qshell. Sa madaling salita, sinasabi sa iyo ng system na malapit nang maubos ng JVM ang heap memory nito , at dapat mong ayusin ang configuration bago mag-crash ang server na may OutOfMemory error.
Ipinakilala ng IBM ang mga ganitong uri ng mensahe nang eksakto upang magkaroon ng paunang babala ang administrator bago mag-crash ang application server . Samakatuwid, kapag natanggap mo ang mga paulit-ulit na babalang ito, malinaw na senyales na dapat mong suriin ang mga setting ng maximum heap na nakatalaga sa JVM kung saan tumatakbo ang IWA o ang nauugnay na portal.
Sa ilang mga totoong kaso sa mundo, napansin ng mga administrador na kahit na tila walang gumagamit ang isang portal, dalawa o tatlong mensaheng "halos puno na ang heap" ang nabubuo pa rin araw-araw . Kadalasan ito ay dahil sa mga internal na proseso ng aplikasyon, mga gawain sa background, o mga memory leak na nagpapanatili sa heap na aktibo sa kabila ng kawalan ng trapiko ng gumagamit.
Bukod pa rito, may mga sitwasyon kung saan mahirap ma- access ang administrative console sa pamamagitan ng web upang baguhin ang mga parameter tulad ng minimum at maximum na laki ng JVM, dahil ang ilang portlet ay nabigo ("nag-crash") nang sinubukan mong buksan ang mga configuration screen.
Isang estratehiya na napatunayang kapaki-pakinabang ay ang ganap na pag-restart ng kapaligiran (server, WebSphere, portal, atbp.) , hintaying bumalik ang lahat sa isang matatag na estado, at pagkatapos ay mag-log in sa administrative console upang suriin ang configuration ng memorya. May mga pagkakataon na ang mga minimum at maximum heap field ay lumabas na blangko, umaasa sa mga default na halaga, na hindi laging angkop para sa mga kapaligiran na may malaking load.
Matapos makakuha ng access, pinili ng ilang administrator na magtakda, halimbawa, ng minimum na heap size na 512 MB at maximum na 1024 MB (bilang mga test value lamang) upang makita kung bumubuti ang performance ng system at bumababa ang mga babalang mensahe. Gayunpaman, mahalagang isaayos ang mga value na ito sa available na memory sa IBM i mismo at sa uri ng workload na hinahawakan ng server.
Sa buong kontekstong ito, bagama't ang mga partikular na mensahe tungkol sa "GUMAGAMIT ANG JAVA NG 95% NG GC HEAP" ay partikular sa WebSphere , ang PASE environment at ang Qshell ay maaaring hindi direktang kasangkot, dahil maraming tool at script ang naglulunsad ng mga proseso ng Java o nakikipag-ugnayan sa mga serbisyong naka-deploy sa parehong server.
Mga setting ng WebSphere, IWA at mga bersyon sa IBM i V6R1
Kapag nakaranas ka ng mga isyu sa performance o memory sa mga environment tulad ng iSeries Access for Web (IWA) sa IBM i V6R1 , mahalagang maunawaan ang ilang mahahalagang punto tungkol sa mga bersyon at compatibility ng WebSphere, dahil dito nagtatagpo ang Qshell, PASE, Java, at configuration ng server.
Para magsimula, ipinapayong suriin ang eksaktong bersyon ng iSeries Access for Web na iyong na-install . Karaniwan itong mabe-verify sa pamamagitan ng pagtingin sa espesyal na pahina ng /webaccess/iWAInfo na ipinapakita mismo ng application. Doon mo makikita ang kasalukuyang antas ng IWA.
Sa partikular na kaso ng IBM i V6.1, nagkaroon ng isang malaking update na kinilala sa pamamagitan ng PTF number na SI44342 , na tumutugma sa pinakabagong bersyon na magagamit para sa release na iyon. Ang pagpapanatiling updated ng IWA sa antas na iyon (o sa kasalukuyang antas sa iyong kapaligiran) ay maaaring malutas ang maraming isyu sa stability o memory na natugunan na sa paglipas ng panahon.
Sa kabilang banda, kapag tinutukoy ang isang "portal" sa kontekstong ito, mahalagang malaman kung ang tinutukoy mo ay IWA (iSeries Access for Web) o isang buong WebSphere Portal . Bagama't maaaring magkasamang gamitin ang parehong ito sa IBM i, ang kanilang mga kinakailangan sa configuration at memory ay hindi pareho, at ang mga sintomas ng pagkabigo (mga portlet na hindi naglo-load, mga mensahe ng error, matinding pagbagal) ay maaaring nakalilito kung hindi ka malinaw sa kung aling produkto ang iyong ginagamit.
Ang isang mahalagang aspeto ay ang uri ng server kung saan naka-deploy ang IWA: maaari itong maging isang WebSphere Application Server 6.1, 7.0, isang portal, o isang internal server . Ang mga parameter ng JVM ay nag-iiba depende sa uri ng server, sa partikular na bersyon, at gayundin sa uri ng Java Virtual Machine na ginamit (halimbawa, ang klasikong "klasiko" o ang mas modernong J9).
Kapag nagsimula kang makakita ng madalas na mga mensaheng "halos puno na ang heap", bukod pa sa pagsuri sa mga parameter ng memorya, mahalagang isaalang-alang kung kailangan mong maglapat ng mga karagdagang PTF o kahit na i-update ang bersyon mismo ng portal o ang WebSphere . Ang IBM i V6R1 ay may limitasyon sa bersyon ng iWAS na maaari mong i-upgrade, kaya ipinapayong suriin ang opisyal na dokumentasyon para sa pinakabagong sinusuportahang kumbinasyon para sa iyong release.
Bilang buod: kung ang iyong IBM i V6R1 environment na may IWA 6.1 na naka-deploy sa WebSphere ay nagsimulang magkaroon ng mga isyu sa memorya, dapat mong masusing suriin ang heap configuration, IWA PTF level, eksaktong bersyon ng WebSphere, at uri ng JVM . Sa ganoon lamang magkakaroon ka ng kumpletong larawan ng problema at makakagawa ng mga naaangkop na pagsasaayos nang hindi kinakailangang pansamantalang mag-restart.
Ang lahat ng ito ay hindi direktang nauugnay sa Qshell dahil, sa pamamagitan ng mga script at command sa PASE environment, maaari mong subaybayan ang mga proseso, maglunsad ng mga pantulong na gawain, o kahit na i-automate ang mga operasyon sa pagpapanatili na makakatulong na mapanatili ang server sa maayos na kondisyon, mula sa paglilinis ng mga file sa IFS hanggang sa pagbuo ng mga listahan ng log para sa pagsusuri.
Sa buong pangkalahatang-ideya na ito, nakita natin kung paano nagsasama ang Qshell sa IBM i bilang isang POSIX interpreter na nagpapalawak sa mga kakayahan ng system . Pinapayagan nito ang mga gawaing kasing simple ng paglilista ng mga file sa IFS at pagsusulat ng output sa isang pisikal na file, at nagsisilbi pa ngang mahalagang bahagi sa loob ng mga kumplikadong kapaligiran gamit ang Java at WebSphere. Ang epektibong paggamit ng Qshell ay nangangailangan ng matibay na pag-unawa sa papel nito sa loob ng PASE, pamilyar sa mga utos tulad ng `ls`, `set`, at `shift`, at kahandaang pagsamahin ito sa CL at mga klasikong tool ng IBM i. Sa pamamagitan ng pamamaraang ito, ang Qshell ay nagiging isang malakas na kakampi para sa parehong mga administrador at developer na gustong masulit ang platform.
Masigasig na manunulat tungkol sa mundo ng mga byte at teknolohiya sa pangkalahatan. Gustung-gusto kong ibahagi ang aking kaalaman sa pamamagitan ng pagsusulat, at iyon ang gagawin ko sa blog na ito, ipakita sa iyo ang lahat ng mga pinaka-kagiliw-giliw na bagay tungkol sa mga gadget, software, hardware, teknolohikal na uso, at higit pa. Ang layunin ko ay tulungan kang mag-navigate sa digital na mundo sa simple at nakakaaliw na paraan.