Pull to refresh

Скриптинг на bash — это очень просто

Reading time2 min
Views1.8K
Очень часто многие пользователи VDS/Серверов покупают различные панели управления, суть которых — автоматизация рутинной работы вроде добавления виртхостов апача.
Но какая из панелей умеет производить массовое добавление виртхостов? Да вроде никакая. А скрипт из пары десятков строк — очень даже умеет. Немного модифицируем прошлый скрипт и сделаем его более «переносимым».
Пусть массовое добавление будет происходить при помощи файла, имя которого — IP адрес, а содержимое — список доменов. Да, подобные задачи решаются через мод виртхост или рерайт, но в данном случае пример — чисто академический.

#!/bin/sh
[ -z $1 ] && (echo "Enter file"; exit 1)
HTTPD=/etc/httpd/conf.d
BASE=/home
USER=username
for i in `cat $1`; do
    VHOST="$BASE/$USER/$i/htdocs"
    mkdir -p $VHOST
    chown -R $USER:$USER $BASE/$USER/$i
    cat << EOF > $HTTPD/$i.conf
<VirtualHost $1:80>
	ServerName $i
	ServerAlias www.$i
	DocumentRoot $VHOST
	ErrorLog /var/log/httpd/$i.error_log
	CustomLog /var/log/httpd/$i.log combined
</VirtualHost>
EOF
done

После запуска скрипта не забудьте сделать reload апачу

Сразу привлекает внимание пятая строка с циклом. В качестве списка аргументов выступает результат действий команды cat, читающей содержимое файла, так как обратные кавычки выполняют заключенные в них команды и выдают результат.
Далее в цикле идет выполнение действий, знакомых по прошлому скрипту, только тут они выполняются в цикле.

Слишком просто? Хорошо, попробуем модифицировать скрипт, чтоб он добавлял домены в bind. Пусть все домены будут прописаны на ns1.mydomain.com и ns2.mydomain.com в качестве NS серверов, а почта будет лежать на mx1.mydomain.com и mx2.mydomain.com соответственно. А www пропишем алиасом. Итак:
#!/bin/sh
[ -z $1 ] && (echo "Enter file"; exit 1)
CONF=/etc/named.conf
BASE=/var/named
USER=bind
for i in `cat $1`; do
    ZONE="$BASE/$i.db"
    cat << EOF > $ZONE
$TTL 14400
@      86400	IN      SOA     ns1.mydomain.com. root.$i. (
		2009112801
		86400
		7200
		3600000
		86400 )
$i. 86400 IN NS ns1.mydomain.com.
$i. 86400 IN NS ns2.mydomain.com.
$i. IN MX 10 mx1.mydomain.com.
$i. IN MX 20 mx2.mydomain.com
$i. IN A $1
www IN CNAME $i.
EOF
    chown $USER:$USER $ZONE
    echo "zone \"$i\" { type master; file \"$ZONE\"; };" >> $CONF
done
rndc reload


Обращаю внимание, что в строке добавления списков зон в конфиг bind используются кавычки и они экранируются обратным слешем.

Итак, получилось два скрипта которые обеспечивают на 80% функционал предоставляющий коммерческими панелями упраления. При этом они бесплатны, не отжирают ресурсы и их легко изменять под свои задачи.
Tags:
Hubs:
+2
Comments8

Articles

Change theme settings