Egyszerű, közös indítószkript több programverzióhoz

Mivel az eddigiekben több program több verziójának telepítését mutattam be, ezeket nem tartottam volna jónak egyszerre automatikusan indítani a rendszer betöltésével. Így az ehhez szükséges lépéseket kihagytam. Mégis jó volna egy megoldás, amivel rövidebb utasítással és könnyebben lehetne elindítani az FPM-et, Apache HTTPD-t és MySQL-t. Bár így is kézzel kell indítani és leállítani őket, sokkal egyszerűbben. Ezt fogom most bemutatni.

Csomagfrissítés

Eddig csak annyit írtam a parancssori munkáról és a csomagtelepítésről, amennyit feltétlenül szükséges volt a fejezetek megértéséhez. Így a Debian frissítése is elmaradt, bár említettem, hogyan kellene. Itt az idő, futtassuk a következő utasításokat root felhasználóként!

  1. apt-get update
  2. apt-get upgrade

Bár ez nem előfeltétele a fejezetben írtak sikerességének, de itt az ideje, hogy többet törődjünk a rendszerrel is.

Indító szkript készítés

A szkripteket a /opt/wtkmgr mappába tesszük. Ehhez el kell készíteni.

  1. mkdir /opt/wtkmgr

A következő fájlokat fogja tartalmazni a mappa:

  • apache: Az Apache szerverek kezelése
  • php-fpm: A PHP FPM-ek kezelése
  • mysql: A MySQL-ek kezelése
  • wtkmgr: Közös indítószkript

A szkripteket egyben is le lehet tölteni egy tar fájlként. A letöltés és kitömörítés és jogosultság beállítás a következő:

  1. cd /opt/
  2. wget https://it-sziget.hu/sites/default/files/wtkmgr-0.1.tar
  3. tar xf wtkmgr-0.1.tar
  4. chmod -R 0700 wtkmgr

Apache

Az "apache" nevű szkript tartalma:

  1. #!/bin/bash
  2.  
  3. apdir="/opt/apache/"
  4. apbin="/bin/apachectl"
  5.  
  6. ptrn="$apdir%s$apbin"
  7.  
  8. cmd="start"
  9. ver=`ls $apdir`
  10.  
  11. # Ha van első argumentum,
  12. # legyen az Apache utasítása
  13. # Majd töröljük az argumentumok közül
  14. if [ ! -z "$1" ]; then
  15.   cmd="$1"
  16.   shift
  17. fi
  18.  
  19. # Ha még minidg van argumentum,
  20. # legyen az Apache könyvtára ( verziója )
  21. if [ ! -z "$1" ]; then
  22.  ver="$1"
  23. fi
  24.  
  25.  
  26. # Ha létezik a megadott apachectl szkript
  27. # az adott verzióhoz,
  28. # futtatjuk a megadott utasítással.
  29. for i in $ver; do
  30.   f=`printf "$ptrn" $i`
  31.   if [ -f "$f" ]; then
  32.      echo "CMD: $f $cmd"
  33.      "$f" $cmd
  34.   fi
  35. done

Első paramétere a start, stop, stb. utasítások. Második a verzió vagy verziók idézőjelben.

  1. /opt/wtkmgr/apache start "2.2 2.4"
  2. /opt/wtkmgr/apache stop 2.2

PHP FPM

A php-fpm szkript tartalma:

  1. #!/bin/bash
  2.  
  3. pdir="/opt/php/"
  4. pbin="/sbin/php-fpmd"
  5. pbinalt="/sbin/php-fpm"
  6.  
  7. ptrn="$pdir%s$pbin"
  8. ptrnalt="$pdir%s$pbinalt"
  9.  
  10. cmd="start"
  11. ver=`ls $pdir`
  12.  
  13. # Ha van első argumentum,
  14. # legyen az fpm utasítása.
  15. # Majd töröljük az argumentumok közül.
  16. if [ ! -z "$1" ]; then
  17.   cmd="$1"
  18.   shift
  19. fi
  20.  
  21. # Ha még mindig van argumentum,
  22. # legyen a PHP könyvtára ( verziója ).
  23. if [ ! -z "$1" ]; then
  24.  ver="$1"
  25. fi
  26.  
  27.  
  28. # Ha létezik a megadott php-fpmd szkript
  29. # az adott verzióhoz,
  30. # futtatjuk a megadott utasítással.
  31. # Ha létezik a php-fpm, akkor azt.
  32. # 5.2.17-es PHP-nek eltérő nevű szkriptje van.
  33. for i in $ver; do
  34.   f=`printf "$ptrn" $i`
  35.   falt=`printf "$ptrnalt" $i`
  36.   if [ -f "$f" ]; then
  37.      echo "CMD: $f $cmd"
  38.      "$f" $cmd
  39.   elif [ -f "$falt" ]; then
  40.      echo "CMD: $falt $cmd"
  41.      "$falt" $cmd
  42.   fi
  43. done

Első paramétere a start, stop, stb. utasítások. Második a verzió vagy verziók idézőjelben.

  1. /opt/wtkmgr/php-fpm start "5.2.17 5.3.24"
  2. /opt/wtkmgr/php-fpm stop 5.3.24

MySQL

A MySQL-eket indító szkript tartalma:

  1. #!/bin/bash
  2.  
  3. mydir="/opt/mysql/"
  4. mybin="/bin/mysql.server"
  5.  
  6. ptrn="$mydir%s$mybin"
  7.  
  8. cmd="start"
  9. ver=`ls $mydir`
  10.  
  11. # Ha van első argumentum
  12. # legyen a MySQL utasítása.
  13. # Majd töröljük az argumentumok közül.
  14. if [ ! -z "$1" ]; then
  15.   cmd="$1"
  16.   shift
  17. fi
  18.  
  19. # Ha még mindig van argumentum,
  20. # legyen a MySQL könyvtára ( verziója ).
  21. if [ ! -z "$1" ]; then
  22.   ver="$1"
  23. fi
  24.  
  25.  
  26. # Ha létezik a megadott mysql.server szkript
  27. # az adott verzióhoz,
  28. # futtatjuk a megadott utasítással.
  29. for i in $ver; do
  30.   f=`printf "$ptrn" $i`
  31.   if [ -f "$f" ]; then
  32.      echo "CMD: $f $cmd"
  33.      "$f" $cmd
  34.   fi
  35. done

Első paramétere a start, stop, stb. utasítások. Második a verzió vagy verziók idézőjelben.

  1. /opt/wtkmgr/mysql start "5.1 5.6"
  2. /opt/wtkmgr/mysql stop 5.1

Közös indító

Majd pedig egy olyan szkript lesz, ami mindegyik program mindegyik verzióját képes indítani egyszerre vagy tetszőleges verziókat. Ez a wtkmgr, aminek a tartalma:

  1. #!/bin/bash
  2.  
  3. f=`readlink -f "$0"`
  4. d=`dirname "$f"`
  5.  
  6. ptrn="$d/%s"
  7.  
  8.  
  9. aver=
  10. pver=
  11. mver=
  12.  
  13. acmd=
  14. pcmd=
  15. mcmd=
  16.  
  17. cmd="start"
  18.  
  19. usage() {
  20. cat <<'EOF'
  21. Használat: $0 [-h] [-a Apache verzió] [-p PHP verzió] [-m MySQL verzió] [-c start|reload|restart|stop]
  22.  
  23. Példák:
  24.    Apache 2.2 indítása:
  25.       $0 -a 2.2 -c start
  26.    Apache 2.2 sé 2.4 indítása
  27.       $0 -a 2.2 -a 2.4 -c start
  28.       vagy
  29.       $0 -a "2.2 2.4" -c start
  30.    PHP 5.2.17, FPM indítása
  31.       $0 -p 5.2.17 -c start
  32.       vagy
  33.    MySQL 5.6 indítása
  34.       $0 -m 5.6 -c start
  35.    A "-c érték" elhagyható. Akkor az érték automatikusan "start".
  36.    A verziókhoz írható kötőjel. Akkor az összes elérhető verzióra
  37.    vonatkozik az utasítás a "-c" után. A következő parancs minden
  38.    program minden verzióját elindítja.
  39.       $0 -a - -p - -m -
  40.  
  41. EOF
  42. }
  43.  
  44. if [ $# -eq 0 ]; then
  45.   usage
  46. fi
  47.  
  48. # betűjeles argumentumok értékeinek kezelése
  49. while getopts "a:p:m:c:h" OPT; do
  50.   arg="$OPTARG"
  51.   case $OPT in
  52.     a)
  53.        acmd=`printf "$ptrn" apache`
  54.        if [ "$arg" != "-" ]; then  
  55.           aver="$aver $arg"
  56.        fi
  57.        ;;
  58.     p)
  59.        pcmd=`printf "$ptrn" php-fpm`
  60.        if [ "$arg" != "-" ]; then  
  61.           pver="$pver $arg"
  62.        fi
  63.        ;;
  64.     m)
  65.        mcmd=`printf "$ptrn" mysql`
  66.        if [ "$arg" != "-" ]; then  
  67.           mver="$mver $arg"
  68.        fi
  69.        ;;
  70.     c)
  71.        cmd="$arg"
  72.        ;;
  73.     h)
  74.        usage
  75.        ;;
  76.   esac
  77. done
  78.  
  79. # A kért programok futtatása
  80. if [ ! -z "$acmd" ]; then
  81.    "$acmd" "$cmd" "$aver"
  82. fi
  83.  
  84. if [ ! -z "$pcmd" ]; then
  85.    "$pcmd" "$cmd" "$pver"
  86. fi
  87.  
  88. if [ ! -z "$mcmd" ]; then
  89.    "$mcmd" "$cmd" "$mver"
  90. fi

Ehhez a szkripthez már saját súgó is tartozik. Betűkkel jelölt argumentumokat fogad el, ahol az "a" az Apache, a "p" a PHP FPM és a "m" a MySQL. A "h" pedig a súgó.

Súgó:

  1. /opt/wtkmgr/wtkmgr -h

Minden program indítása:

  1. /opt/wtkmgr/wtkmgr -a - -p - -m - -c start

Apache 2.4 indítása PHP 5.3.24 FPM-mel MySQL nélkül.

  1. /opt/wtkmgr/wtkmgr -a 2.4 -p 5.3.24 -c start

A további példák a súgóban olvashatók.

PATH változó beállítása

Hogy még a /opt/wtkmgr -t is elhagyhassuk a szkript futtatásakor, a "/etc/bash.bashrc" fájl végére tegyük a következő sort:

  1. export PATH=$PATH:/opt/wtkmgr

A legközelebbi bejelentkezés után már elérhető lesz a wtkmgr útvonal nélkül is.

Jogosultság beállítása

Minden szkriptnek kell futtatási jog.

  1. chmod -R 0700 /opt/wtkmgr

Ötlet további könnyítésre

A közös indító szkriptet felhasználva akár alkalmazásonként is lehet írni új indító szkriptet. Előre tudva, hogy a p5324.a22.vm1 domainnek PHP 5.3.24 -re, Apache 2.2 -re és MySQL 5.1 -re van szüksége, egy, a domain nevével mentett szkript tartalma lehetne a következő:

  1. wtkmgr -a 2.2 -p 5.3.24 -m 5.1 $@

A végén levő $@ miatt mögé kerülnek a további paraméterek. Tehát ennyi volna a domainhez szükséges összetevők indítása.

  1. p5324.a22.vm1 start

Viszont vigyázni kellene, hogy a leállításkor nem venné figyelembe, hogy a MySQL-t esetleg egy másik verzió még használja. Haladók készíthetnek a domainekhez valamilyen konfigurációs fájlt, ami tartalmazza a függőségeit. Illetve valamilyen módon számon kellene tartani a futó domaineket (alkalmazásokat) és csak azokat az összetevőket leállítani, amiket másik alkalmazás épp nem használ.

Összefoglalás

Most azért már egyszerűbb az élet a szerverrel. Ennél persze sokkal profibb kezelő szkripteket is lehetne írni. Ahogy a verziószám is sejteti a fájl végén, tervezem is a továbbfejlesztését.

Ezzel a fejezettel elérkeztünk ahhoz a fázishoz, ahol parancssorból használva már teljes értékű tesztkörnyezetünk lehetne. Vannak viszont lehetőségek a távoli munka egyszerűsítésére is. És egyáltalán lehetővé tételére. Nem sokára erről is írni fogok.

Bár nagyon pici a változtatás a gépen, én mégis elmentem a virtuális gépet "wtk-vm1-v10-wtkmgr" néven, csak mert még túl sok helyem van a merevlemezen. És ne feledjük, volt egy rendszerfrissítés is.

Források

Megosztás/Mentés

Hozzászólások

Anonymous képe

HIBA:
Első paramétere a start, stop, stb. utasítások. Második a verzió vagy verziók idézőjelben.

/opt/wtkmgr/apache "2.2 2.4" start
/opt/wtkmgr/apache 2.2 stop

a leírás és az utasítás ellent mond egymásnak!

a leírás szerinti működik:
/opt/wtkmgr/apache start "2.2 2.4"
/opt/wtkmgr/apache stop 2.2

Rimelek képe

Köszönöm! Javítottam.

Új hozzászólás