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!

apt-get update
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.

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ő:

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

Apache

Az "apache" nevű szkript tartalma:

#!/bin/bash

apdir="/opt/apache/"
apbin="/bin/apachectl"

ptrn="$apdir%s$apbin"

cmd="start"
ver=`ls $apdir`

# Ha van első argumentum,
# legyen az Apache utasítása
# Majd töröljük az argumentumok közül
if [ ! -z "$1" ]; then
  cmd="$1"
  shift
fi

# Ha még minidg van argumentum,
# legyen az Apache könyvtára ( verziója )
if [ ! -z "$1" ]; then
 ver="$1"
fi

# Ha létezik a megadott apachectl szkript
# az adott verzióhoz,
# futtatjuk a megadott utasítással.
for i in $ver; do
  f=`printf "$ptrn" $i`
  if [ -f "$f" ]; then
     echo "CMD: $f $cmd"
     "$f" $cmd
  fi
done

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

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

PHP FPM

A php-fpm szkript tartalma:

#!/bin/bash

pdir="/opt/php/"
pbin="/sbin/php-fpmd"
pbinalt="/sbin/php-fpm"

ptrn="$pdir%s$pbin"
ptrnalt="$pdir%s$pbinalt"

cmd="start"
ver=`ls $pdir`

# Ha van első argumentum,
# legyen az fpm utasítása.
# Majd töröljük az argumentumok közül.
if [ ! -z "$1" ]; then
  cmd="$1"
  shift
fi

# Ha még mindig van argumentum,
# legyen a PHP könyvtára ( verziója ).
if [ ! -z "$1" ]; then
 ver="$1"
fi

# Ha létezik a megadott php-fpmd szkript
# az adott verzióhoz,
# futtatjuk a megadott utasítással.
# Ha létezik a php-fpm, akkor azt.
# 5.2.17-es PHP-nek eltérő nevű szkriptje van.
for i in $ver; do
  f=`printf "$ptrn" $i`
  falt=`printf "$ptrnalt" $i`
  if [ -f "$f" ]; then
     echo "CMD: $f $cmd"
     "$f" $cmd
  elif [ -f "$falt" ]; then
     echo "CMD: $falt $cmd"
     "$falt" $cmd
  fi
done

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

/opt/wtkmgr/php-fpm start "5.2.17 5.3.24"
/opt/wtkmgr/php-fpm stop 5.3.24

MySQL

A MySQL-eket indító szkript tartalma:

#!/bin/bash

mydir="/opt/mysql/"
mybin="/bin/mysql.server"

ptrn="$mydir%s$mybin"

cmd="start"
ver=`ls $mydir`

# Ha van első argumentum
# legyen a MySQL utasítása.
# Majd töröljük az argumentumok közül.
if [ ! -z "$1" ]; then
  cmd="$1"
  shift
fi

# Ha még mindig van argumentum,
# legyen a MySQL könyvtára ( verziója ).
if [ ! -z "$1" ]; then
  ver="$1"
fi

# Ha létezik a megadott mysql.server szkript
# az adott verzióhoz,
# futtatjuk a megadott utasítással.
for i in $ver; do
  f=`printf "$ptrn" $i`
  if [ -f "$f" ]; then
     echo "CMD: $f $cmd"
     "$f" $cmd
  fi
done

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

/opt/wtkmgr/mysql start "5.1 5.6"
/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:

#!/bin/bash

f=`readlink -f "$0"`
d=`dirname "$f"`

ptrn="$d/%s"

aver=
pver=
mver=

acmd=
pcmd=
mcmd=

cmd="start"

usage() {
cat <<'EOF'
Használat: $0 [-h] [-a Apache verzió] [-p PHP verzió] [-m MySQL verzió] [-c start|reload|restart|stop]

Példák:
   Apache 2.2 indítása:
      $0 -a 2.2 -c start
   Apache 2.2 sé 2.4 indítása
      $0 -a 2.2 -a 2.4 -c start
      vagy
      $0 -a "2.2 2.4" -c start
   PHP 5.2.17, FPM indítása
      $0 -p 5.2.17 -c start
      vagy
   MySQL 5.6 indítása
      $0 -m 5.6 -c start
   A "-c érték" elhagyható. Akkor az érték automatikusan "start".
   A verziókhoz írható kötőjel. Akkor az összes elérhető verzióra
   vonatkozik az utasítás a "-c" után. A következő parancs minden
   program minden verzióját elindítja.
      $0 -a - -p - -m -

EOF
}

if [ $# -eq 0 ]; then
  usage
fi

# betűjeles argumentumok értékeinek kezelése
while getopts "a:p:m:c:h" OPT; do
  arg="$OPTARG"
  case $OPT in
    a)
       acmd=`printf "$ptrn" apache`
       if [ "$arg" != "-" ]; then  
          aver="$aver $arg"
       fi
       ;;
    p)
       pcmd=`printf "$ptrn" php-fpm`
       if [ "$arg" != "-" ]; then  
          pver="$pver $arg"
       fi
       ;;
    m)
       mcmd=`printf "$ptrn" mysql`
       if [ "$arg" != "-" ]; then  
          mver="$mver $arg"
       fi
       ;;
    c)
       cmd="$arg"
       ;;
    h)
       usage
       ;;
  esac
done

# A kért programok futtatása
if [ ! -z "$acmd" ]; then
   "$acmd" "$cmd" "$aver"
fi

if [ ! -z "$pcmd" ]; then
   "$pcmd" "$cmd" "$pver"
fi

if [ ! -z "$mcmd" ]; then
   "$mcmd" "$cmd" "$mver"
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ó:

/opt/wtkmgr/wtkmgr -h

Minden program indítása:

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

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

/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:

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.

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ő:

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.

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.