Bashi käivitamine üksikasjalikult

Kui leiate selle lehe otsingust, üritate tõenäoliselt lahendada mingit probleemi bash-i käivitamisega.

Võib-olla ei seadistata teie bash-i keskkonnas keskkonnamuutujat ja te ei saa aru, miks. Võib-olla olete midagi pannud erinevatesse bash-i laadimisfailidesse või profiilidesse, või kõigisse failidesse juhuslikult, kuni see töötas.

Igal juhul on selle märkme mõte tutvustada bash-i käivitamise protseduuri võimalikult lihtsasti, et saaksite probleemidega toime tulla.

Diagramm

See vooskeem kirjeldab kõiki bash-i käivitamise protsesse.

Bashi käivitamine üksikasjalikult

Nüüd vaatame iga osa lähemalt.

Sisselogimisämber?

Esiteks peate otsustama, kas olete sisselogimisämbris või mitte.

Sisselogimisämber on esimene ämber, kuhu sisenete, kui logite sisse interaktiivsesse seanssi. Sisselogimisämber ei nõua kasutajanime ja parooli sisestamist. Saate sisselogimisämber sundida käivitama, lisades lipu --login kui kutsutakse bash, näiteks:

bash --login

Sisselogimisämber seadistab põhikeskkonna, kui bash-i ämbrit esmakordselt käivitatakse.

Interaktiivne?

Seejärel peate määrama, kas ämber on interaktiivne või mitte.

Seda saab kontrollida, kas keskkonnamuutuja on olemas. PS1 (ta seab sisestamise funktsiooni):

if [ "${PS1-}" ]; then
  echo interaktiivne
else
  echo mitte-interaktiivne
fi

Või vaadata, kas parameeter on seadistatud -i, kasutades erilist miinusmärkide muutujat - bashis, näiteks:

$ echo $-

Kui väljundis on sümbol i, siis on shell interaktiivne.

Sisselogimise shellis?

Kui olete sisselogimise shellis, siis bash otsib faili /etc/profile ja käivitab selle, kui see eksisteerib.

Siis otsib ta ühte neist kolmest failist järgmises järjekorras:

~/.bash_profile
~/.bash_login
~/.profile

Kui ta leiab ühe, käivitab ta selle ja jätab teised vahele.

Interaktiivses shellis?

Kui olete interaktiivses shellis ilma sisselogimiseta (mitte-sisselogimise shell), eeldatakse, et olete juba olnud sisselogimise shellis, keskkond on seadistatud ja see pärandatakse.

Sel juhul käivitatakse järjekorras järgmised kaks faili, kui need eksisteerivad:

/etc/bash.bashrc
~/.bashrc

Ühtegi varianti?

Kui te ei ole ei sisselogimise ega ka interaktiivses shellis, siis on teie keskkond tõepoolest tühi. See tekitab suurt segadust (vt allpool cron-ülesannete kohta).

Sel juhul vaatab bash muutujat BASH_ENV teie keskkonnas ja loob vastava faili, mis on seal määratud.

Tüüpilised raskused ja praktilised reeglid

Croni ülesanded

95% juhtudel on minu bash-käivituse tõrgete põhjuseks see, et cron'i ülesanne ei tööta nii, nagu oodatud.

See neetud ülesanne töötab normaalselt, kui ma käivitan selle käsurealt, kuid ebaõnnestub crontabis käivitamisel.

Siit kaks põhjust:

  • Croni ülesanded ei ole interaktiivsed.
  • Erinevalt käsurea skriptidest ei pärine cron'i ülesanded keskkonnast.

Tavaliselt te ei märka ega hooli sellest, et shelli skript ei ole interaktiivne, kuna keskkond pärineb interaktiivsest shellist. See tähendab, et kõik PATH ja alias on seadistatud nii, nagu ootate.

Sellepärast tuleb sageli seadistada kindel PATH cron'i ülesande jaoks, nagu siin:

* * * * * PATH=${PATH}:/path/to/my/program/folder myprogram

Skriptid, mis kutsuvad üksteist

Veel üks levinud probleem, kui skriptid kogemata kutsuvad üksteist. Näiteks, /etc/profile viitab ~/.bashrc.

Tavaliselt juhtub see, kui keegi püüab parandada teatud viga ja paistab, et kõik töötab. Kahjuks, kui tuleb eristada neid erinevaid sessioone, tekivad uued probleemid.

Docker image liivakastis

Katsumiseks, kuidas shelli käivitada, lõin Docker'i pildi, mida saab kasutada shelli käivitamise silumiseks turvalises keskkonnas.

Käivitamine:

$ docker run -n bs -d imiell/bash_startup
$ docker exec -ti bs bash

Dockerfile asub siit.

Sundlogin ja shelli sisendi simuleerimiseks:

$ bash --login

Muutuja komplekti kontrollimiseks BASH_ENV:

$ env | grep BASH_ENV

Silumiseks crontab iga minuti järel käivitatakse lihtne skript ( /root/ascript):

$ crontab -l
$ cat /var/log/script.log

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster