Bashi käivitamine üksikasjalikult

Kui leidsid selle lehe otsingust, siis üritad tõenäoliselt lahendada mõnda bash-i käivitamise probleemi.

Võib-olla ei seata sinu bash-i keskkonnas keskkonnamuutujat ja sa ei mõista, miks. Võib-olla oled riputanud midagi erinevatesse bash-i laadimisfailidesse või profiilidesse, või oled proovinud kõike, kuni see töötas.

Igatahes, selle märkme mõte on esitada bash-i käivitamise protseduur võimalikult lihtsalt, et saaksid probleeme lahendada.

Diagramm

See vooskeem kokkuvõtab kõik protsessid bash-i käivitamisel.

Bashi käivitamine üksikasjalikult

Nüüd vaatame iga osa lähemalt.

Sisselogimis kest?

Esiteks tuleb valida, kas oled sisselogimis kestas (login shell) või mitte.

Sisselogimis kest on esimene kest, kuhu pääsed sisse sisselogimisel interaktiivses seansis. Sisselogimis kest ei nõua kasutajanime ja parooli sisestamist. Sa saad sundida sisselogimis kesta käivitamist, lisades flagi --login käskluse kutsel bash, näiteks:

bash --login

Sisselogimis kest seadistab baas keskkonna kest bash-i esmakordsel käivitamisel.

Interaktiivne?

Siis määrad, kas kest on interaktiivne või mitte.

Seda saab kontrollida muutuja olemasolu järgi PS1 (see seadistab käsurida sisestamise funktsiooni):

if [ "${PS1-}" ]; then
  echo interactive
else
  echo non-interactive
fi

Või vaadata, kas parameeter on seadistatud -i, erilise miinusmärgiga muutuja - bash-is, näiteks:

$ echo $-

Kui väljundis on märk i, siis kest on interaktiivne.

Sisselogimis kestas?

Kui oled sisselogimis kestas, siis bash otsib faili /etc/profile ja käivitab selle, kui see eksisteerib.

Siis otsitakse ühte neist kolmest failist järgmises järjekorras:

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

Kui leidub üks, siis käivitab selle ja jätab teised vahele.

Interaktiivses kestas?

Kui oled interaktiivses kestas, kuid mitte sisselogimis kestas (non-login shell), eeldatakse, et juba oled olnud sisselogimis kestas, keskkond on seadistatud ja see pärandatakse.

Sel juhul täidetakse järgemööda järgmised kaks faili, kui need eksisteerivad:

/etc/bash.bashrc
~/.bashrc

Ühtegi varianti?

Kui sa ei ole ei sisselogimis kestas, ega interaktiivses kestas, siis on sinu keskkond tõeliselt tühi. See tekitab palju segadust (vt allpool cron-töid).

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

Tüüpilised raskused ja empiirilised reeglid

Cron ülesanded

95% juhtudest on minu bash-i käivitamise tõrge seotud sellega, et cron ülesanne ei tööta nagu oodatud.

See neetud ülesanne töötab normaalselt, kui ma käivitan selle käsureal, aga kukub kokku, kui see käivitatakse crontabis.

Siin kaks põhjust:

  • Cron ülesanded ei ole interaktiivsed.
  • Erinevalt käsurea skriptidest ei pärine cron ülesanded shelli keskkonnast.

Te tavaliselt ei pane tähele ega hooli sellest, et shelli skript ei ole interaktiivne, sest keskkond pärandatakse interaktiivsest shellist. See tähendab, et kõik PATH ja alias on seadistatud nii, nagu te ootate.

Seetõttu on sageli vajalik seadistada kindel PATH cron ülesande jaoks, nagu siin:

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

Skriptid, mis kutsuvad üksteist

Teine levinud probleem on see, kui skriptid ekslikult seadistatakse üksteist kutsuma. Näiteks, /etc/profile kutsutakse ~/bashrc.

Tavaliselt juhtub nii, kui keegi üritas mõnda viga parandada ja tundub, et kõik töötas. Kahjuks, kui neid erinevaid seansse tuleb eristada, tekivad uued probleemid.

Docker pilt liivakastis

Eksperimenteerimiseks shelli käitamisega lõin ma Docker pildi, mida saab kasutada shelli käivitamise tõrkeotsinguks turvalises keskkonnas.

Pärast seda

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

Dockerfile asub siin.

Sissetoomise ja sisselogimise simuleerimiseks:

$ bash --login

Muutuja komplekti kontrollimiseks BASH_ENV:

$ env | grep BASH_ENV

Tõrkeotsing crontab iga minuti järel käivitatakse lihtne skript (selle sees /root/ascript):

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

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster