#!/bin/bash # info: change service config # options: CONFIG SERVICE [RESTART] # # The function for changing service confguration. #----------------------------------------------------------# # Variable&Function # #----------------------------------------------------------# # Argument definition src=$1 service=$2 restart=$3 echo "$0 $*" >/tmp/t.log # Includes source $VESTA/func/main.sh source $VESTA/conf/vesta.conf #----------------------------------------------------------# # Verifications # #----------------------------------------------------------# check_args '2' "$#" 'CONFIG SERVICE [RESTART]' if [ ! -e "$src" ]; then check_result "$E_NOTEXIST" "$src config doesn't exist" fi #----------------------------------------------------------# # Action # #----------------------------------------------------------# # Defining dst config path case $service in nginx) dst='/etc/nginx/nginx.conf';; httpd) dst='/etc/httpd/conf/httpd.conf';; apache2) dst='/etc/apache2/apache2.conf';; exim) dst='/etc/exim/exim.conf';; exim4) dst='/etc/exim4/exim4.conf.template';; vsftpd) dst=$(find /etc/vsftpd* -name 'vsftpd.conf');; proftpd) dst=$(find /etc/proftpd* -name 'proftpd.conf');; php) dst=$(find /etc/php* -name php.ini);; mysql) dst=$(find /etc/my* -name my.cnf);; mysqld) dst=$(find /etc/my* -name my.cnf);; mariadb) dst=$(find /etc/my* -name my.cnf);; postgresql) dst=$($BIN/v-list-sys-pgsql-config plain |cut -f 1);; postgresql-hba) dst=$($BIN/v-list-sys-pgsql-config plain |cut -f 2);; dovecot) dst=$(find /etc/dovecot* -name dovecot.conf);; dovecot-1) dst='/etc/dovecot/conf.d/10-auth.conf';; dovecot-2) dst='/etc/dovecot/conf.d/10-logging.conf';; dovecot-3) dst='/etc/dovecot/conf.d/10-mail.conf';; dovecot-4) dst='/etc/dovecot/conf.d/10-master.conf';; dovecot-5) dst='/etc/dovecot/conf.d/10-ssl.conf';; dovecot-6) dst='/etc/dovecot/conf.d/20-imap.conf';; dovecot-7) dst='/etc/dovecot/conf.d/20-pop3.conf';; dovecot-8) dst='/etc/dovecot/conf.d/auth-passwdfile.conf.ext';; named) dst='/etc/named.conf';; bind9) dst='/etc/bind/named.conf';; bind9-opt) dst='/etc/bind/named.conf.options';; spamd) dst=$($BIN/v-list-sys-spamd-config plain);; spamassassin) dst=$($BIN/v-list-sys-spamd-config plain);; clamd) dst=$($BIN/v-list-sys-clamd-config plain);; cron) dst='/etc/crontab';; crond) dst='/etc/crontab';; fail2ban) dst='/etc/fail2ban/jail.local';; *) check_result $E_NOTEXIST "service $service doesn't exist" esac # Checking config path for config in $dst; do if [ ! -e "$config" ]; then check_result $E_NOTEXIST "$service config doesn't exist" fi done # Checking diff between src and dst configs for config in $dst; do diff -q $src $config >/dev/null if [ $? -ne 0 ]; then cp $config $config.vst.back cp $src $config update="yes" fi done # Restarting service if [ "$update" = 'yes' ] && [ "$restart" != 'no' ]; then if [[ "$service" =~ - ]]; then service=$(echo ${service%-*}) fi if [ "$service" = 'php' ]; then if [ "$WEB_SYSTEM" = "nginx" ]; then if [ $(ps --no-headers -o comm 1) == systemd ]; then service=$(systemctl | grep -o -E "php.*fpm.*\.service") service=${service//.service/} else service=$(ls /etc/init.d/php*fpm* |cut -f 4 -d /) fi else service=$WEB_SYSTEM fi fi for single_service in $service; do service $single_service restart >/dev/null 2>&1 done <<< "$service" if [ $? -ne 0 ]; then for config in $dst; do cat $config.vst.back > $config rm -f $config.vst.back done check_result $E_RESTART "$service failed to start with new config" fi fi #----------------------------------------------------------# # Vesta # #----------------------------------------------------------# # Logging log_event "$OK" "$ARGUMENTS" exit