mirror of
https://github.com/serghey-rodin/vesta.git
synced 2025-02-10 12:03:00 -08:00
260 lines
7.1 KiB
Bash
Executable File
260 lines
7.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# info: list system services
|
|
# options: [FORMAT]
|
|
#
|
|
# The function for obtaining the list of configured system services.
|
|
|
|
|
|
#----------------------------------------------------------#
|
|
# Variable&Function #
|
|
#----------------------------------------------------------#
|
|
|
|
# Argument defenition
|
|
format=${1-shell}
|
|
|
|
# Includes
|
|
source $VESTA/func/main.sh
|
|
source $VESTA/conf/vesta.conf
|
|
|
|
export PATH=$PATH:/sbin
|
|
|
|
get_srv_state() {
|
|
srv=$1
|
|
proc_name=${2-$1}
|
|
|
|
# Check service status
|
|
state='running'
|
|
|
|
# Searching related pids
|
|
if [ -z $3 ]; then
|
|
pids=$(pidof $proc_name |tr ' ' '|')
|
|
else
|
|
pids=$(pidof -x $proc_name |tr ' ' '|')
|
|
fi
|
|
if [ -z "$pids" ] && [ "$proc_name" != 'nginx' ] ; then
|
|
#fallback to pgrep
|
|
pids=$(pgrep $proc_name |tr '\n' '|')
|
|
fi
|
|
if [ ! -z "$pids" ]; then
|
|
pid=$(echo $pids|cut -f 1 -d \|)
|
|
pids=$(egrep "$pids" $tmp_file)
|
|
|
|
# Calculating CPU usage
|
|
cpu=$(echo "$pids" |awk '{ sum += $2} END {print sum}')
|
|
|
|
# Calculating memory usage
|
|
mem=$(echo "$pids" |awk '{sum += $3} END {print sum/1024 }')
|
|
mem=$(printf "%.0f\n" $mem)
|
|
|
|
# Searching service uptime
|
|
if [ -e "/var/run/$srv.pid" ]; then
|
|
srv_file="/var/run/$srv.pid"
|
|
fi
|
|
if [ -z "$srv_file" ] && [ -e "/var/run/$srv/$srv.pid" ]; then
|
|
srv_file="/var/run/$srv/$srv.pid"
|
|
fi
|
|
if [ -z $srv_file ] && [ -e "/proc/$pid" ]; then
|
|
srv_file="/proc/$pid"
|
|
fi
|
|
if [ ! -z "$srv_file" ]; then
|
|
mtime=$(stat -c "%Y" $srv_file)
|
|
rtime=$((ctime - mtime))
|
|
rtime=$((rtime / 60))
|
|
else
|
|
rtime=0
|
|
fi
|
|
else
|
|
# Service is stopped
|
|
state='stopped'
|
|
mem=0
|
|
cpu=0
|
|
rtime="0"
|
|
fi
|
|
}
|
|
|
|
|
|
#----------------------------------------------------------#
|
|
# Action #
|
|
#----------------------------------------------------------#
|
|
|
|
# Save current proccess list
|
|
tmp_file=$(mktemp)
|
|
ps -eo pid,pcpu,size > $tmp_file
|
|
|
|
# Get current time
|
|
ctime=$(date +%s)
|
|
|
|
# Web
|
|
service=$WEB_SYSTEM
|
|
if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
|
|
if [ "$service" == 'apache' ]; then
|
|
service='httpd'
|
|
fi
|
|
get_srv_state $service
|
|
str="NAME='$service' SYSTEM='web server' STATE='$state' CPU='$cpu'"
|
|
str="$str MEM='$mem' RTIME='$rtime'"
|
|
|
|
fi
|
|
|
|
# Backend
|
|
service=$WEB_BACKEND
|
|
if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
|
|
get_srv_state $service
|
|
str="$str\nNAME='$service' SYSTEM='backend server' STATE='$state' CPU='$cpu'"
|
|
str="$str MEM='$mem' RTIME='$rtime'"
|
|
fi
|
|
|
|
# Proxy
|
|
service=$PROXY_SYSTEM
|
|
if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
|
|
get_srv_state $service
|
|
str="$str\nNAME='$service' SYSTEM='reverse proxy' STATE='$state' CPU='$cpu'"
|
|
str="$str MEM='$mem' RTIME='$rtime'"
|
|
fi
|
|
|
|
|
|
# DNS
|
|
service=$DNS_SYSTEM
|
|
if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
|
|
if [ "$service" == 'bind' ] || [ "$service" == 'bind9' ]; then
|
|
proc_name='named'
|
|
fi
|
|
get_srv_state $service $proc_name
|
|
str="$str\nNAME='$service' SYSTEM='dns server' STATE='$state' CPU='$cpu'"
|
|
str="$str MEM='$mem' RTIME='$rtime'"
|
|
fi
|
|
|
|
# MAIL
|
|
service=$MAIL_SYSTEM
|
|
if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
|
|
get_srv_state $service
|
|
str="$str\nNAME='$service' SYSTEM='mail server' STATE='$state' CPU='$cpu'"
|
|
str="$str MEM='$mem' RTIME='$rtime'"
|
|
fi
|
|
|
|
# IMAP
|
|
service=$IMAP_SYSTEM
|
|
if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
|
|
get_srv_state $service
|
|
str="$str\nNAME='$service' SYSTEM='pop/imap server' STATE='$state'"
|
|
str="$str CPU='$cpu' MEM='$mem' RTIME='$rtime'"
|
|
fi
|
|
|
|
# ANTIVIRUS
|
|
service=$ANTIVIRUS_SYSTEM
|
|
if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
|
|
if [ -e "/etc/redhat-release" ]; then
|
|
if [ "$ANTIVIRUS_SYSTEM" = 'clamav' ];then
|
|
service='clamd'
|
|
fi
|
|
get_srv_state $service
|
|
else
|
|
if [ "$ANTIVIRUS_SYSTEM" = 'clamav-daemon' ];then
|
|
clam_proc_name='clamd'
|
|
fi
|
|
get_srv_state $service $clam_proc_name
|
|
fi
|
|
str="$str\nNAME='$service' SYSTEM='email antivirus' STATE='$state'"
|
|
str="$str CPU='$cpu' MEM='$mem' RTIME='$rtime'"
|
|
fi
|
|
|
|
# ANTISPAM
|
|
service=$ANTISPAM_SYSTEM
|
|
if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
|
|
get_srv_state $service spamd
|
|
str="$str\nNAME='$service' SYSTEM='email antispam' STATE='$state'"
|
|
str="$str CPU='$cpu' MEM='$mem' RTIME='$rtime'"
|
|
fi
|
|
|
|
# DB
|
|
service=$DB_SYSTEM
|
|
if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
|
|
for db in ${DB_SYSTEM//,/ }; do
|
|
db_proc_name=''
|
|
service="$db"
|
|
if [ "$service" = 'mysql' ]; then
|
|
if [ -e "/etc/redhat-release" ]; then
|
|
service='mysqld'
|
|
db_proc_name='mysqld'
|
|
if [ -e "/usr/lib/systemd/system/mariadb.service" ]; then
|
|
service='mariadb'
|
|
fi
|
|
fi
|
|
fi
|
|
if [ "$service" == 'pgsql' ]; then
|
|
service='postgresql'
|
|
db_proc_name='postmaster'
|
|
if [ ! -e "/etc/redhat-release" ]; then
|
|
db_proc_name='postgres'
|
|
fi
|
|
if [ ! -e '/etc/init.d/postgresql' ]; then
|
|
db_proc_name='postgres'
|
|
fi
|
|
fi
|
|
get_srv_state $service $db_proc_name
|
|
str="$str\nNAME='$service' SYSTEM='database server' STATE='$state'"
|
|
str="$str CPU='$cpu' MEM='$mem' RTIME='$rtime'"
|
|
done
|
|
fi
|
|
|
|
# FTP
|
|
service=$FTP_SYSTEM
|
|
if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
|
|
get_srv_state $service
|
|
str="$str\nNAME='$service' SYSTEM='ftp server' STATE='$state' CPU='$cpu'"
|
|
str="$str MEM='$mem' RTIME='$rtime'"
|
|
fi
|
|
|
|
# CRON
|
|
service=$CRON_SYSTEM
|
|
if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
|
|
get_srv_state $service
|
|
str="$str\nNAME='$service' SYSTEM='job scheduler' STATE='$state'"
|
|
str="$str CPU='$cpu' MEM='$mem' RTIME='$rtime'"
|
|
fi
|
|
|
|
# FIREWALL
|
|
service=$FIREWALL_SYSTEM
|
|
if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
|
|
state="stopped"
|
|
/sbin/iptables -L vesta >/dev/null 2>&1
|
|
if [ "$?" -eq 0 ]; then
|
|
state="running"
|
|
fi
|
|
str="$str\nNAME='$FIREWALL_SYSTEM' SYSTEM='firewall'"
|
|
str="$str STATE='$state' CPU='0' MEM='0' RTIME='0'"
|
|
fi
|
|
|
|
# Fail2ban
|
|
service=$FIREWALL_EXTENSION
|
|
if [ ! -z "$service" ] && [ "$service" != 'remote' ]; then
|
|
get_srv_state $service fail2ban-server script
|
|
str="$str\nNAME='$service' SYSTEM='brute-force monitor' STATE='$state'"
|
|
str="$str CPU='$cpu' MEM='$mem' RTIME='$rtime'"
|
|
fi
|
|
|
|
|
|
# Defining config
|
|
echo -e "$str" > $tmp_file
|
|
conf=$tmp_file
|
|
|
|
# Defining fileds to select
|
|
fields="\$NAME \$SYSTEM \$STATE \$CPU \$MEM \$RTIME"
|
|
|
|
# Listing services
|
|
case $format in
|
|
json) json_list ;;
|
|
plain) nohead=1; shell_list ;;
|
|
shell) fields='$NAME $STATE $CPU $MEM $RTIME'
|
|
shell_list | column -t ;;
|
|
*) check_args '1' '0' 'USER [FORMAT]'
|
|
esac
|
|
|
|
rm -f $tmp_file
|
|
|
|
#----------------------------------------------------------#
|
|
# Vesta #
|
|
#----------------------------------------------------------#
|
|
|
|
exit
|