Simple bash script for checking system readiness for launching an application. It checks if necessary softwares/tools installed, required modules enabled, recommended ini settings, depending servers are up and required ports are listening.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# Author : Anis Uddin Ahmad <anis.prorgrammer@gmail.com> | |
# http://ajaxray.com | |
# How to use : https://cl.ly/1f1L0K413g1x | |
# List command line tools | |
dependencies=(httpd php mysql beanstalkd convert) | |
# If php application, list required modules | |
php_modules=(curl PDO pdo_mysql session Reflection hash json sockets oci8 imagick) | |
# List required recommended ini settings as 'option value' (separated by space) | |
php_settings=('max_input_vars 5001' 'post_max_size 1024M' 'upload_max_filesize 100M' 'memory_limit 1024M') | |
# list servers and required ports as 'IP-Address PORT' (separated by space) | |
listeners=('127.0.0.1 3306' '127.0.0.1 80' '127.0.0.1 11300') | |
message='' | |
fg_red=`tput setaf 1` | |
fg_green=`tput setaf 2` | |
reset=`tput sgr0` | |
# Common messages | |
YES="${fg_green}OK${reset}" | |
NO="${fg_red}NO${reset}" | |
NOT="${fg_red}NOT FOUND${reset}" | |
check_program() { | |
printf "%-40s" "Checking if ${1} installed..." | |
command -v $1 >/dev/null 2>&1 && echo ${YES} || { echo ${NOT}; message+="${1} not installed. "; } | |
} | |
check_port() { | |
# expected args: host port | |
printf "%-40s" "Listening ${1}:${2}..." | |
# Check first if server is up | |
ping -c 2 ${1} > /dev/null 2>&1 | |
if [ $? -eq 0 ] ; then | |
# Check if port is listening | |
nc -w2 ${1} ${2} &> /dev/null 2>&1 | |
[[ $? -eq 0 ]] && echo ${YES} || { echo ${NO}; message+="${1}:${2} NOT LISTENING. "; } | |
else | |
{ echo "${fg_red}NOT REACHABLE${reset}"; message+="Server ${1} not reachable. "; } | |
fi | |
} | |
check_php_module() { | |
printf "%-40s" "Checking PHP module ${1} ..." | |
PHP_MODS_ENABLED="${PHP_MODS_ENABLED}:-`php -m`" | |
[[ ${PHP_MODS_ENABLED} =~ ${1} ]] && echo ${YES} || { echo ${NOT}; message+="PHP module ${1} not enabled. "; } | |
} | |
check_php_ini() { | |
# expected args: host port | |
printf "%-25s %-15s" ${1} ${2} | |
[[ `php -i | grep ${1}` =~ "=> ${2} =>" ]] && echo ${YES} || echo ${NO} | |
} | |
echo "=> Checking required dependencies are installed:" | |
for i in "${dependencies[@]}" ; do | |
check_program $i | |
done | |
echo "=> Checking required server/ports are listening:" | |
for j in "${listeners[@]}" ; do | |
check_port $j | |
done | |
# Check modules and ini settings ONLY if PHP application | |
if [[ `check_program php` =~ 'OK' ]] ; then | |
echo "=> Checking required PHP Modules are enabled:" | |
for k in "${php_modules[@]}" ; do | |
check_php_module $k | |
done | |
echo "=> Checking recommended PHP ini settings:" | |
for l in "${php_settings[@]}" ; do | |
check_php_ini $l | |
done | |
fi | |
if [[ -z ${message} ]] ; then | |
echo "${fg_green}SUCCESS: System is ready!${reset}" | |
exit 0 | |
else | |
echo "${fg_red}WARNING: System may be NOT ready yet!${reset}" | |
echo ${message}; | |
exit 1 | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This post describes usages of this script - https://cl.ly/1f1L0K413g1x