О выпиливании BOM из utf-8 файлов
March 22, 2009 by Andrew Tch · 2 Comments
После буйства Алекса, поставившего какой-то суровый русский плагин, пришлось немного починить atdodu.lv. Суть была в том что в RSS почему-то вылезала BOM UTF-8 mark, но не было понятно, из какого файла это дрянь бралась.
После 15 минут было наваяно решение на баше для нахождения файлов с utf-8 bom отметинами.
for file in `find .`; do cat $file 2>/dev/null | hexdump | grep 0000000\ bbef > /dev/null; if [ $? -eq 0 ]; then echo $file; fi; done
Немного комментариев. Начало, думаю, понятно всем – ищем все файлы в текущей папке. Далее, выполняем составную команду:
cat $file 2>/dev/null | hexdump | grep 0000000\ bbef > /dev/null
2>/dev/null нужен чтобы cat не вопила об ошибках что xxx is a directory. bbef – как раз и есть тот BOM file mark. Вывод grep нам не нужен, пихаем его в /dev/null – нам нужен только результат работы grep, 0 если что-то найдено или единица – если нет.
Полученный результат выполнения последней команды ($?) проверяем на равенство нулю и в случае равенства печатаем название файла:
if [ $? -eq 0 ]; then echo $file; fi;
Короче – выпилите notepad, пожалуйста.
——————-
У кого bash, a у кого – создание сайтов.
Сервер, сервер, как ты там?
March 17, 2008 by Andrew Tch · 13 Comments
Значит, задача. Отсылать несколько раз в день смс на мобилко что сервер жив, здоров и функционирует в штатном режиме. Инструменты – bash, cron и Fedora Core. Для получения статуса сервиса юзаем service, для мелочей – стандартные утилиты, для отсылки смс – стандартный гейтвей оператора + mutt.
Вот что вышло:
#!/bin/bash
TMPFILE="/tmp/sms.tmp"
SERVICE="/sbin/service"
touch $TMPFILE
######### HTTPD
$SERVICE httpd status | grep running > /dev/null
if [ $? -eq 0 ]; then
echo "Httpd: OK" >> $TMPFILE
else
echo "Httpd: fail" >> $TMPFILE
fi
######## MySQL
$SERVICE mysqld status | grep running > /dev/null
if [ $? -eq 0 ]; then
echo "MySQL: OK" >> $TMPFILE
else
echo "MySQL: fail" >> $TMPFILE
fi
####### DNS
$SERVICE named status | grep running > /dev/null
if [ $? -eq 0 ]; then
echo "DNS: OK" >> $TMPFILE
else
echo "DNS: fail" >> $TMPFILE
fi
####### postfix
$SERVICE postfix status | grep running > /dev/null
if [ $? -eq 0 ]; then
echo "postfix: OK" >> $TMPFILE
else
echo "postfix: fail" >> $TMPFILE
fi
####### dovecot
$SERVICE dovecot status | grep running > /dev/null
if [ $? -eq 0 ]; then
echo "Dovecot: OK" >> $TMPFILE
else
echo "Dovecot: fail" >> $TMPFILE
fi
########## hdd
echo "HDD:" >> $TMPFILE
df -h | tail -n 3 | head -1 >> $TMPFILE
########## uptime
echo "Sysload:" >> $TMPFILE
uptime | awk -F'load average:' '{ print $2 }' >> $TMPFILE
cat $TMPFILE | mutt <тут типо мой логин>@sms.lmt.lv
#cat $TMPFILE
rm $TMPFILE
В процессе отладки нашелся баг – сервер провайдера не воспринимал мейлы с отправителем localhost@localdomain, что, в принципе, понятно. Решение – в редактировании /etc/Muttrc.local :
# Local configuration for Mutt. set realname="Fenrir" set from="admin@pets.lv" set use_from=yes set use_envelope_from=yes set envelope_from_address="admin@pets.lv"
Dixi. Спать пора.