MDAdm Работа с RAID

Рано или поздно при настройке серверов приходится столкнуться с такой вещью как RAID.

На брендовых серверах они зачастую полностью хардварные, но тем не менее очень часто приходится сталкиваться и с софтварным рейдом.

Если вам лень с таким разбираться — администрирование серверов явно не ваше дело.

Вам тогда нужна аренда сервера где-то в датацентре, при чем уже с поддержкой.

Построение RAID

Построим на сервере RAID1.

Сначала создадим одинаковые разделы на дисках sdb и sdc

#fdisk /dev/sdb

command (m for help): n

Partition type:

p primary (0 primary, 0 extended, 4 free)

e extended

Select (default p): p

Partition number (1-4, default 1): 1

First sector (2048-16777215, default 2048):

Using default value 2048

Last sector, +sectors or +size{K,M,G} (2048-16777215, default 16777215): +5G

Command (m for help): t

Hex code (type L to list codes): 83

Changed system type of partition 1 to 83

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.


Аналогично сделаем и для диска sdc

Установим утилиту работы с RAID

# apt-get install mdadm


Теперь соберем RAID 1

# mdadm —create —verbose /dev/md0 —level=1 —raid-devices=2 /dev/sdb1 /dev/sdc1


После сборки состояние RAID можно просмотреть при помощи команды

# cat /proc/mdstat

В результате мы должны получить вывод что-то похожее на

personalities : [raid1]

md0 : active raid1 sdc1[1] sdb1[0]

5238720 blocks super 1.2 [2/2] [UU]

unused devices: <none>


Теперь можно на созданном RAID-разделе создавать файловую систему и подключать ее к системе.

# mkfs.ext4 /dev/md0

# mkdir /mnt/raid

# mount /dev/md0 /mnt/raid


Так же для дальнейшей проверки корректности работы рейда создадим на RAID-разделе файл:

# touch /mnt/raid/test.txt

  


Ошибка при работе с RAID

После того, как мы создали RAID он у нас определяется как устройство /dev/md0, однако после перезагрузки такого устройства в системе не будет, а вместо него появится /dev/md127. Тут можно или в дальнейшем использовать именно такое имя устройства, или, что обычно удобнее, насильно объяснить системе, что наш RAID-раздел именно /dev/md0 и ни как иначе. Для этого выполним команду:

# mdadm -Db /dev/md0 > /etc/mdadm/mdadm.conf


В результате выполнения этой команды в файле /etc/mdadm/mdadm.conf будет строка

ARRAY /dev/md0 metadata=1.2 name=ub-4:0 UUID=7da67e34:3d29e3a1:bdf36edd:6be26e60


После этого необходимо обновить образ initramfs:

# update-initramfs -u


Теперь после перезагрузки наш RAID-раздел будет определяться как /dev/md0.

  


Деградация и восстановление RAID

Посмотрим как можно провести деградацию рейда. Естественно, в реальной системе диск обычно вылетает сам и нет необходимости специально объявлять его сбойным, но мы воспользуемся возможности утилиты mdadm и объявим часть RAID — /dev/sdb1 сбойным.

# mdadm /dev/md0 —fail /dev/sdb1


Посмотрим теперь на состояние RAID

# cat /proc/mdstat


Мы должны увидеть, что /dev/sdb1 имеет некие проблемы и рейд деградирован:

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]

md0 : active raid1 sdb1[2](F) sdc1[1]

5238720 blocks super 1.2 [2/1] [_U]

unused devices: <none>


Теперь с помощью fdisk создадим на устройстве /dev/sdd раздел такого же размера, как и /dev/sdс1. После этого удалим /dev/sdb1 из RAID

# mdadm /dev/md0 —remove /dev/sdb1

И добавим новый раздел /dev/sdd1

# mdadm /dev/md0 —add /dev/sdd1


Если мы сразу же посмотрим на состояние RAID

# cat /proc/mdstat


То мы увидим, что RAID у нас опять состоит из двух нормальных дисков и в данный момент происходит его синхронизация:

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]

md0 : active raid1 sdd1[2] sdc1[1]

5238720 blocks super 1.2 [2/1] [_U]

[=>……………….] recovery = 6.2% (329984/5238720) finish=1.2min speed=65996K/sec

unused devices: <none>


Если мы теперь примонтируем наш RAID

# mount /dev/md0 /mnt/raid/


То увидим, что файл, который мы до этого создавали на месте и ничего никуда не пропало.

# ls /mnt/raid/

lost+found test.txt

спасибо: http://yakim.org.ua/articles/servers/151-raid.html

Bash проверки существования файла, директории, пользователя

Проверка существования файла:
if ! [ -f /path/to/file ]; then
echo 'No file'
fi

Проверка существования директории:
if ! [ -d /path/directory/ ]; then
echo 'No directory'
fi

Проверка существования пользователя:
grep "username:" /etc/passwd >/dev/null
if [ $? -ne 0 ]; then
echo 'No username found'
fi

сравнение целых чисел

-eq
равно

if [ "$a" -eq "$b" ]

-ne
не равноif [ "$a" -ne "$b" ]

-gt
большеif [ "$a" -gt "$b" ]

-ge
больше или равноif [ "$a" -ge "$b" ]

-lt
меньшеif [ "$a" -lt "$b" ]

-le
меньше или равноif [ "$a" -le "$b" ]

<
меньше (внутри двойных круглых скобок )(("$a" < "$b"))

<=
меньше или равно (внутри двойных круглых скобок)(("$a" <= "$b"))

>
больше (внутри двойных круглых скобок)(("$a" > "$b"))

>=
больше или равно (внутри двойных круглых скобок)(("$a" >= "$b"))

сравнение строк

=
равно

if [ "$a" = "$b" ]

==
равноif [ "$a" == "$b" ]

Синоним оператора =.

[[ $a == z* ]]    # истина, если $a начинается с символа "z" (сравнение по шаблону)
[[ $a == "z*" ]]  # истина, если $a равна z*

[ $a == z* ]      # имеют место подстановка имен файлов и разбиение на слова
[ "$a" == "z*" ]  # истина, если $a равна z*

# Спасибо S.C.
!=
не равноif [ "$a" != "$b" ]

Этот оператор используется при поиске по шаблону внутри [[ … ]].

<
меньше, в смысле величины ASCII-кодовif [[ "$a" < "$b" ]]

if [ "$a" \< "$b" ]

Обратите внимание! Символ «<» необходимо экранировать внутри [ ].

>
больше, в смысле величины ASCII-кодовif [[ "$a" > "$b" ]]

if [ "$a" \> "$b" ]

Обратите внимание! Символ «>» необходимо экранировать внутри [ ].

См. Пример 25-6 относительно применения этого оператора сравнения.

-z
строка «пустая», т.е. имеет нулевую длину
-n
строка не «пустая».

Maldet + в превентивной защите linux

Борьба с вирусами (С помощью утилиты maldet)

Все я думаю уже сталкивались с таким понятием как вирус.
К сожалению, такое действительно есть и ничего с этим не сделаешь.
Maldet — утилита с помощью которой можно найти вирус.Итак, давайте начнем с того как поставить данную утилиту, выполняем:

cd ~
wget http://www.rfxn.com/downloads/maldetect-current.tar.gz
tar xfz maldetect-current.tar.gz
cd maldetect-*
./install.sh

После Вам на экран, если Вы все сделали правильно, будет выведено такое сообщение:

Linux Malware Detect v1.4.1
(C) 2002-2011, R-fx Networks
(C) 2011, Ryan MacDonald
inotifywait (C) 2007, Rohan McGovern
This program may be freely redistributed under the terms of the GNU GPLinstallation completed to /usr/local/maldetect
config file: /usr/local/maldetect/conf.maldet
exec file: /usr/local/maldetect/maldet
exec link: /usr/local/sbin/maldet
exec link: /usr/local/sbin/lmd
cron.daily: /etc/cron.daily/maldetmaldet(5206): {sigup} performing signature update check…
maldet(5206): {sigup} local signature set is version 201205035915
maldet(5206): {sigup} latest signature set already installed

Вот на этом установка завершена, идем дальше.

Для того чтобы:
проверить каталог (директорию), выполняем:

maldet -a /dir

после проверки будет выдан отчет о проверке, для того чтобы его посмотреть, введите:

maldet —report XX

* — XX замените на значение которое будет выдано после проверки дир
обновить базу сигнатур, выполняем:

maldet -u

отправить файл на проверку, на сервер данной утилиты:

maldet -c /dirname/filename.txt

Вот в принципе основные команды для этого всего дела, думаю ясно Вам расписал, и Вы взяли для себя что-то полезное.
Благодарю за внимание.

Спасибо: http://golinux.com.ua/debian/borba-s-virusami-s-pomoschyu-utility-maldet.html

 

Cron незабывалка

cron

 

 

Как настраивать cron

Конфигурирование сценариев cron производится через unix shell. Прежде всего нужно определить какие программы вы хотите запускать и узнать полные пути к ним на диске сервера. Для этого перейдите с помощью команды cd в каталог где находится запускаемая программа и узнайте полный путь к этому каталогу с помощью команды pwd. Путь может выглядеть например как /home/u12345/scripts/script.pl. Убедитесь что файл, который вы хотите запускать, имеет права на чтение+исполнение (r+x) для владельца файла.

Поменять права на нужные можно командой:

chmod 750 script.pl

 

Далее выполните команду crontab -e. Вы окажетесь в текстовом редакторе vi, где сможете вводить текст сценария для cron. Краткая справка по редактору vi:

  • для вставки текста нажмите i, затем вводите текст
  • для удаления символов нажмите ESC, а затем наберите x
  • для выхода из vi без сохранения изменений нажмите ESC, а затем наберите :q!
  • для сохранения и выхода нажмите ESC, а затем наберите :wq

Задания для cron пишутся по одному в строке. После каждой строки, в том числе после последней или единственной, обязательно нужно нажать enter — иначе задания работать не будут.

Задание для cron выглядит как строка, в начале находятся пять обязательных полей для указания периодичности задания, а далее следует команда, которую нужно запускать:

поле1 поле2 поле3 поле4 поле5 команда

 

Значения первых пяти полей:

  1. минуты — число от 0 до 59
  2. часы — число от 0 до 23
  3. день месяца — число от 1 до 31
  4. номер месяца в году — число от 1 до 12
  5. день недели — число от 0 до 7 (0-Вс,1-Пн,2-Вт,3-Ср,4-Чт,5-Пт,6-Сб,7-Вс)

Для каждого конкретного параметра можно задать несколько значений через запятую. Например, если в поле «часы» написать 1,4,22, то задание будет запущено в 1 час ночи, в 4 часа утра и в 22 часа. Можно задать интервал — 4-9 будет означать, что программу нужно запускать каждый час в период с 4 до 9 часов включительно. Символ ‘*‘ означает «все возможные значения». Например, указание ‘*‘ в поле «часы» будет означать «запускать каждый час». Символ ‘/‘ служит для указания дополнительной периодичности задания. Например, ‘*/3‘ в поле «часы» означает «каждые три часа».

Итак, как выглядит простейший сценарий cron:

0 */3 * * 2,5 /home/u12345/script.pl

 

Скрипт /home/u12345/script.pl будет автоматически запускаться каждые три часа во вторник и в пятницу. Введя такой сценарий в редакторе vi выйдите с сохранением результатов редактирования и, если вы не допустили ошибок, задание будет поставлено на выполнение с указанной периодичностью. Если при редактировании были допущены ошибки, cron сообщит вам о них.

Например:

/tmp/crontab.xxxxxxx: 1 строк, 9 символов
crontab: installing new crontab
"/tmp/crontab.xxxxxxx":1: bad minute
crontab: errors in crontab file, can't install
Do you want to retry the same edit?

 

Исправьте ошибки и попробуйте сохранить задание опять.

Посмотреть список уже установленных в cron сценариев можно командой crontab -l:

-bash-2.05b$ crontab -l
0 */3 * * 2,5 /home/u12345/script.pl

 

Рекомендация: если требуется запускать какую-то программу один раз в день, особенно если она требует для выполнения больших ресурсов, выполняйте такое задание ночью, в период с 2 до 8 часов — нагрузка на серверы в это время минимальна.

Примеры использования cron

Ниже приводятся примеры заданий для cron. Надеемся, эта информация поможет вам лучше понять работу этой программы.

# выполнять задание раз в час в 0 минут
0 */1 * * * /home/u12345/script.pl

# выполнять задание каждые три часа в 0 минут
0 */3 * * * /home/u12345/script.pl

# выполнять задание по понедельникам в 1 час 15 минут ночи
15 1 * * 1 /home/u12345/script.pl

# выполнять задание 5 апреля в 0 часов 1 минуту каждый год
1 0 5 4 * /home/u12345/script.pl

# выполнять задание в пятницу 13 числа в 13 часов 13 минут
13 13 13 * 5 /home/u12345/script.pl

# выполнять задание ежемесячно 1 числа в 6 часов 10 минут
10 6 1 * * /home/u12345/script.pl

 

Как запускать PHP-скрипты по расписанию

Вы можете выполнять запуск скриптов на языке PHP в указанное время с желаемой периодичностью. Для этого требуется использоватьPHP-CLI интерпретатор, пример использования которого описан здесь.

Поскольку не все PHP-программы могут работать через CLI SAPI без предварительной модификации, можно запускать их через wget. Например:

/usr/local/bin/wget -O /dev/null -q http://mysite.tld/cron.php?action=123

 

Если в скрипте используются функции requireinclude, причём в них указаны относительные пути, то в начале выполняемого скрипта используйте вызов функции chdir(), которая задаст текущую рабочую директорию.

Как получать сообщения об ошибках от программ, запускаемых cron

Если при выполнении программы, которая запускается из cron, возникли ошибки, наверняка вы захотите получать сообщения об этих ошибках, чтобы полностью контролировать работу периодически запускаемых заданий. Для этого в начале cron-сценария поместите такую строку:

MAILTO=адрес@домен.ru

 

Конечно, адрес@домен.ru нужно заменить на реально существующий адрес электронной почты куда надо будет доставлять уведомления. Если нужно получать сообщения об ошибках на несколько адресов, укажите все эти адреса через запятую.

Обратите внимание на то, что cron будет присылать по почте то, что выводят запускаемые скрипты. Например, если вы напишете скрипт, который будет печатать строчку «Hello, world» и поставите его на выполнение через cron, вы будете получать по почте письмо со строкой «Hello, world» каждый раз, когда cron будет запускать такой скрипт.

Чтобы избежать этого, например когда текст, выводимый скриптом, вам не нужен, надо добавить в конец строки-сценария для cron символы

> /dev/null 2>&1

 

Полностью строка для cron будет выглядеть так:

  • Для PHP4:

    0 1 * * * /usr/local/bin/php -q $HOME/script.php > /dev/null 2>&1
  • Для PHP5:

    0 1 * * * /usr/local/bin/php -q $HOME/script.php > /dev/null 2>&1

Рекомендуем проверять корректность синтаксиса скриптов, которые вы устанавливаете на выполнение через cron. Скрипты могут содержать ошибку, могут неодинаково работать при запуске через веб-сервер и через cron и так далее. Для того, чтобы убедиться что скрипт будет правильно работать через cron, предварительно проверьте его такой командой в unix shell:

  • Для PHP4:

    /usr/local/bin/php -l script.php
  • Для PHP5:

    /usr/local/bin/php -l script.php

Если ошибок в скрипте нет, вы увидите сообщение «No syntax errors detected in script.php».

Ограничения

Для программ, которые запускаются через cron, действуют такие же ограничения по потребляемым ресурсам, как для процессов, запускаемых пользователем в unix shell. Речь идет об ограничениях на время выполнения программы, количеству доступной памяти, ограничениях на размер файлов и так далее.

Кроме того, существует ограничение на периодичность запуска программ из cron. Пользователь может запускать свои программы таким образом не чаще чем 1 раз в 1 час.

Спасибо : http://masterhost.ru/support/doc/cron/

 

cron

Планировщик задач в Linux играет незаменимую роль в автоматизации администрирования операционной системы. Роль планировщика задач выполняет демон cron (crond — в некоторых дистрибутивах). Демон cronобычно запускается процессом init в момент запуска системы. После запуска, демон cron ежеминутно просматривает свои таблицы, в которых содержатся информация о периодичности запуска команд и запускает команды, когда значения полей  минута,  час, месяц и хотя бы одно из полей число и день_недели, совпадают с текущим временем. Основной конфигурационный файл демона cron — /etc/crontab:

cron:~#cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

В /etc/crontab задания выполняются с помощью команды run-parts, которая запускает скрипты и программы из указанных каталогов (/etc/cron.hourly, /etc/cron.daily и т.д.). Каждая строка запускает из соответствующего каталога задания ежечасно, ежедневно, еженедельно и ежемесячно, соответственно строкам сверху вниз. Обратите внимание, что все команды здесь запущены от имени пользователя root. Заметьте также, что crontab может содержать присваивания значений переменным shell, которые будут установлены перед запуском команды.

Так же, если необходимо запускать какие-то команды по особому расписанию (не ежечасно, ежедневно, еженедельно и ежемесячно), то таблицы заданий помещаются в каталог /etc/cron.d/.

Каждый пользователь системы имеет свой файл заданий crontab, в котором описано, в какое время и какие программы запускать от имени этого пользователя. Для редактирования файла crontab используется специальная одноименная программа crontab, позволяющая не прерывать процесс cron на время редактирования. Редактировать вручную таблицы cron не рекомендуется. Файлы таблиц планировщика cron для пользователей могут храниться в следующих каталогах:

/var/spool/cron — RedHat
/var/spool/cron/crontabs — debian,ubuntu
/var/spool/cron/tabs — SUSE

Каждая строка планировщика имеет следующий формат:

* * * * * {пользователь} выполняемая_команда
- - - - -
| | | | |
| | | | ----- День недели (0 - 7) (Воскресенье =0 или =7)
| | | ------- Месяц (1 - 12) (можно три буквы из названия месяца,
| | |                        регистр не имеет значения от jan до dec)
| | --------- День (1 - 31)
| ----------- Час (0 - 23)
------------- Минута (0 - 59)

В примере показан формат одной из строки таблицы, состоящий из 7 полей. Первые 5 полей  — это значения, задающие периодичность выполнения команды (расписание). 6-e поле присутствует только в таблицах /etc/crontab и др. расположенных в каталоге /etc/cron.d/. 7-е поле есть сама запускаемая команда. Командой может быть как простая команда, например, ls /proc >> /tmp/proc, или команда запуска написанного вами специального сценария. Со всей оставшаяся частью строки до символа перевода строки или символа %, будет выполнен вызов /bin/sh или другой оболочки, определенной в переменной SHELL в crontab. Знак процента (`%’ ) в команде (если он не экранирован обратной косой чертой (`\’ ) ) будет соответствовать символу перевода строки и все данные после первого `%’  будут посланы для команды на стандартный ввод.

Для указанных выше первых 5 полей, можно использовать звездочку (*), что означает все допустимые значения. Например, если поставить звёздочку в значении месяца, команда будет выполняться каждый месяц во время, указанное другими параметрами.

Дефис (-) между целыми числами обозначает диапазон чисел. Например, 1-4 означает целые числа 1, 2, 3 и 4.

Список значений, разделенных запятыми (,), обозначает перечень. Например, перечисление 3, 4, 6, 8 означает четыре указанных целых числа.

Косая черта (/) используется для определения шага значений. Если после диапазона указать /<целое_число>. Например, значение минут 0-59/2, определяет, что задание будет запущено каждую вторую минуту.

Вся оставшаяся часть строки до символа перевода строки или символа %, будет выполнен вызов /bin/sh или другой оболочки, определенной в переменной SHELL в crontab Знак процента (`%’ ) в команде (если он не экранирован обратной косой чертой (`\’ ) ) будет соответствовать символу перевода строки и все данные после первого `%’  будут посланы для команды на стандартный ввод.

Пример crontab-файла:

# выполнить команды hello каждый понедельник  в 3:30
30 3 * * mon hello
# выполнить команду hello в первый день каждого месяца в 4:10
10 4 1 * * hello
# выполнять каждый день в 0 часов 5 минут, результат складывать в log/daily
5 0 * * * $HOME/bin/daily.job >> $HOME/log/daily 2>&1
# каждый рабочий день в 22:00
0 22 * * 1-5 echo "Пора домой" | mail -s "Уже 22:00" john
23 */2 * * * echo "Выполняется в 0:23, 2:23, 4:23 и т. д."
5 4 * * sun echo "Выполняется в 4:05 в воскресенье"
0 0 1 1 * echo "С новым годом!"
15 10,13 * * 1,4 echo "Эта надпись выводится в понедельник и четверг в 10:15 и 13:15"
0-59 * * * * echo "Выполняется ежеминутно"
# каждые 5 минут
*/5 * * * * echo "Прошло пять минут"

anacron

anacron — (англ. anachronistic cron) асинхронный или анахроничный cron. Anacron в отличие от cron не поддерживает запуск заданий по расписанию, вместо этого задания запускаются с заданным интервалом времени. Это очень удобно для систем которые работают не регулярно, например домашние рабочие станции или ноутбуки. Anacron хранит метки времени файлов в /var/spool/anacron, чтобы записывать время выполнения заданий. При запуске anacron проверяет, прошло ли необходимое количество дней с тех пор, как задача была выполнена в последний раз, и при необходимости запускает ее. Задачи anacron хранятся в конфигурационном файле /etc/anacrontab. Синтаксис данного файла аналогичен /etc/crontab, за исключением полей таблиц:

* * * выполняемая_команда
- - -
| | |
| | --------- идентификатор
| ----------- задержка
------------- период

Период — период выполнения в днях. Задержка — задержка запуска в минутах. Идентификатор задания— любой непустой символ, кроме / \. Задержка чаще всего используется для того чтобы позволить системе полностью загрузиться.

На сегодня все. Давайте подведем маленький итог тому что сегодня узнали:

В Linux есть такой чудо демон — cronДемон cron при загрузке, а так же — после загрузки каждую минуту«шерстит» файл /etc/crontab, каталог /etc/cron.d/ и каталог с пользовательскими таблицами заданий (/var/spool/cron/crontabs) и сверяет текущее время и строку в «просматриваемом» файле и запускает указанную команду, когда значения полей  минута,  час, месяц и хотя бы одно из полей число и день_недели, совпадают с текущим временем.

Так же есть чудо-средство anacron, которое сравнивает не текущее время со временем задания в crontab, а сколько прошло времени с последнего запуска задания, указанного в /etc/anacrontab и если прошел указанный промежуток времени, то задание запускается.

спасибо: wiki + http://www.k-max.name/linux/planirovshhik-linux-cron-crontab-anacron/

Mutt, ssmtp

Спасибо: http://habrahabr.ru/post/82919/ + afiskon + 
paskal

Mutt, ssmtp и отправка отчетов

В свое время, когда меня еще не было на Хабре, эта статья была опубликована в песочнице. К сожалению, она никому не понравилась и со временем была удалена. Долго думал, что с ней делать — забить, запостить таки на Хабре или в своем блоге Записки программиста. Решил, раз она писалась для Хабра, пусть на нем и будет опубликована. Итак, под катом — статья о практике отправки отчетов по e-mail. Сейчас, перечитывая текст, понимаю, что статья — не фонтан, но может кому-нибудь пригодится.

Часто передо мной встает задача вроде такой: необходимо ежемесячно (или еженедельно/ежедневно) обработать такие-то логи, построить по ним отчет и отправить его на заданный E-Mail. В этой статье я как раз хотел бы рассказать о второй части такой задачи, а именно об отправке отчетов. Казалось бы, такая рутинная операция, но трудности с ней возникают чаще, чем может показаться на первый взгляд.

Я предпочитаю использовать уже готовые, проверенные временем, программы, а не писать каждый раз собственные скрипты. В большинстве случаев нужная программа уже была когда-то кем-то написана, зачем изобретать велосипед?

Для отправки отчетов я пользуюсь mutt. В нем меня привлекает простота интерфейса, возраст (читай — стабильность) программы и то, что mutt портирован если не под все, то почти под все unix-like системы. В моей любимой FreeBSD искать его следует в /usr/ports/mail/mutt.

Чтобы при помощи mutt послать письмо с аттачем, достаточно команды

mutt -s Subject -a File User@Host.com

где Subject — тема сообщения, File — имя прикрепляемого файла, а User@Host.com — получатель письма. К письму можно прикрепить несколько файлов или указать несколько получателей. Текст письма программа читает из stdin.

По умолчанию mutt использует sendmail в качестве MTA. Обычно с этим не возникает трудностей — после установки mutt мы можем сразу приступить к написанию скриптов и все будет прекрасно работать. Но мне приходилось сталкиваться с ситуацией, когда посылка писем напрямую с сервера просто запрещена правилами фаервола. В этом случае следует использовать сторонний SMTP сервер.

Проблема в том, что mutt не имеет функций MTA, то есть работа с SMTP — не его задача. Тем не менее, можно научить его слать почту через заданный smtp-сервер и поможет ему в этом программа ssmtp.

Строго говоря, ssmtp является не MTA, а просто smtp-клиентом, эмулирующим работу sendmail. Если вы, как и я, пользуетесь FreeBSD, то можете поставить ssmtp из портов — /usr/ports/mail/ssmtp.

Настройка ssmtp производится путем редактирования файла /usr/local/etc/ssmtp/ssmtp.conf (в вашей ОС путь к файлу может быть другим). Вот как он примерно выглядит:

root=reports@example.ru # от чьего имени шлем письма
mailhub=smtp.example.ru:465 # smtp-сервер и порт
hostname=localhost # имя нашего хоста, желательно вписать верное
UseTLS=Yes # используем зашифрованное соединение
AuthUser=reports@example.ru # логин
AuthPass=qwerty # пароль
FromLineOverride=Yes # Поле From: может задавать mutt

Если вы хотите слать отчеты через Gmail, конфиг будет выглядеть немного иначе:

root=reports@gmail.com
mailhub=smtp.gmail.com:587
hostname=localhost
UseSTARTTLS=YES
AuthUser=reports@gmail.com
AuthPass=qwerty

Пытаемся послать тестовое письмо с помощью ssmtp:

echo "" | ssmtp -v -s Hello admin@example.ru

Если письмо успешно дошло, значит все было сделано правильно. Если ssmtp говорит нечто вроде:

. . .
[->] MAIL FROM:<root@localhost>
[<-] 573 root@localhost failed to route the address
ssmtp: 573 root@localhost failed to route the address

тоже не проблема, просто ssmtp указал неверный адрес отправителя, и smtp-сервер это заметил. Когда будем слать почту через mutt, все будет задано верно.

Чтобы mutt слал почту через ssmtp, в домашнем каталоге пользователя, от имени которого мы собираемся слать отчеты, нужно подправить файл .muttrc

set sendmail="/usr/sbin/ssmtp" # путь к ssmtp
set realname="Example Report System" # имя отправителя
set from="reports@example.ru" # e-mail отправителя

Проверяем работу mutt:

echo "" | mutt -s Hello admin@example.ru

Письмо должно успешно дойти до получателя. Если вы хотите использовать mutt в скриптах, запускаемых по крону, нужно иметь ввиду, что mutt находится в каталоге /usr/local/bin, который по умолчанию не прописан в переменную окружения PATH в вашем crontab. Решения два — либо исправить переменную окружения PATH в кронтабе, либо использовать полное имя mutt в скриптах.

Бывает и такое, что на сервере, с которого приходится слать отчеты, у нас нет root-привилегий. В этом случае либо придется уговаривать админа установить и настроить mutt, либо все-таки написать свой собственный скрипт отправки электронной почты. Но это уже совсем другая история.

Настройка Smtp Relay Server — Ssmtp

Если у вас есть свой сервер, вы наверняка не раз задумывались о том, чтобы иметь возможность отсылать с него логи себе на почту, или дать возможность веб-сайту на этом сервере рассылать письма.

Обычно настраивается postfix или sendmail или ещё что-нибудь громоздкое. Я предлагаю вам вместо этого настроить smtp relay server, ssmtp, который предназначен именно для пересылки отправляемых писем на “большой” сервер —Яндекс почта для доменаGoogle Apps for domain, или просто почтовый аккаунт Gmail или Yandex, если вам потребуется посылать письма только себе.

Настройка на примере Ubuntu.

Сначала уставновим ssmtp и отредактируем revaliases. Вставьте либо секцию для gmail, либо секцию для yandex mail, заменив ubuntu на ваше имя пользователя, а sendlogs на имя пользователя почты. Если вы используете почту для домена, просто введите полное имя пользователя своего домена, например, noreply@realmfpa.ru. Ctrl+OEnter для сохранения, Ctrl+X для выхода.

sudo apt-get install ssmtp
sudo nano /etc/ssmtp/revaliases

#for yandex
root:sendlogs@yandex.ru:smtp.yandex.ru:465
ubuntu:sendlogs@yandex.ru:smtp.yandex.ru:465
#for gmail
root:sendlogs@gmail.com:smtp.gmail.com:587
ubuntu:sendlogs@gmail.com:smtp.gmail.com:587

Далее отредактируем ssmtp.conf. Вместо имеющегося текста вставьте приведенную здесь секцию general, и либо секцию для gmail, либо секцию для yandex mail. Советую использовать для учетной записи отправки почты пароль только из букв и цифр; мне не удалось заставить сервер понимать пароль со специальными символами — он выдавал ошибку при попытке отправить письмо.

sudo nano /etc/ssmtp/ssmtp.conf

#general
hostname=localhost
FromLineOverride=NO
AuthUser=yourrobotuser@domain.com
AuthPass=password
#for yandex
mailhub=smtp.yandex.ru:465
UseTLS=YES
#for gmail
mailhub=smtp.gmail.com:587
UseSTARTTLS=YES

Если вы хотите настроить отправку писем для своего веб-сайта, использующего php, сделайте следующие изменения в файле php.ini:

#for apache
sudo nano /etc/php5/apache2/php.ini
#for nginx and php-fpm
sudo nano /etc/php5/fpm/php.ini[/bash]

Найдите (Ctrl+W) строку sendmail_path (она задокументирована с помощью ;) и ниже неё вставьте:

sendmail_path = ssmtp -t

Вот и всё, вы и ваш сайт можете отправлять письма. Для тестирования можете создать и отправить тестовое письмо:

nano test

To:youraccount@gmail.com
From:yourrobotuser@domain.com
Subject: Test

This is a test mail.

ssmtp -t < test

Если вылезает такое: 
Сообщение отправить не удалось, процесс-потомок вернул 127 (Exec error.).
Сообщение отправить не удалось. 
Значит смотри пути к MTA агенту!

Также Была проблема
Отправить файл по почте из консоли
$ ls > file.txt
$ echo "Смотри вложение" | mutt -x -s "Метод 3" -a file.txt -- zendzirou@gmail.com

Элементарный способ настройки архивации в linux.
В качестве архиватора был выбран 7z, который присутствует как на unix, так и на ms системах, отлично сжимает, а кроме того ещё и бесплатен. Установка пакета производится командой:

sudo apt-get install 7z

Команда архивации, для добавления в cron:

7z -t7z -mx=9 -r -ssc a "имя-архива"-$(date +%Y-%m-%d_%H).7z "каталог-который-жмем"

После радуемся жизни.
Источник 1
Источник 2

Решил кроме простого архивирования добавить автоматическую отправку архивов по почте с помощью mutt, где столкнулся с проблемой.
В моём случае получилась следующая команда:

7z -t7z -mx=9 -r -ssc a /backups/$(date +%Y-%m-%d)/ip-$(date +%Y-%m-%d).7z /share/bases/1c_base/!bases/ip && 7z -t7z -mx=9 -r -ssc a /share/backups/$(date +%Y-%m-%d)/ooo-$(date +%Y-%m-%d).7z /share/bases/1c_base/!bases/ooo && 7z -t7z -mx=9 -r -ssc a /share/backups/$(date +%Y-%m-%d)/service-$(date +%Y-%m-%d).7z /share/bases/service_base/!base/ && mutt -s “Backup” -a /backups/$(date +%Y-%m-%d)/*-$(date +%Y-%m-%d).7z - pupkin@bk.ru backup_files_at_$(date +%Y-%m-%d)

Архивация проходит на ура, а вот в:

mutt -s “Backup” -a /backups/$(date +%Y-%m-%d)/*-$(date +%Y-%m-%d).7z - pupkin@bk.ru backup_files_at_$(date +%Y-%m-%d)

появилась такая проблема:

Не удалось получить информацию о -: Нет такого файла или каталога
-: не удалось вложить файл.

Предполагаю, что ошибка кроется в маске для файлов вида

*-$(date +%Y-%m-%d).7z

, но если не так, то тогда как? О.о

Он ругается не на имя файла, а на ‘-‘ после имени
Поставь после файла не «-«, а «—»

mutt -s “Backup” -a /backups/$(date +%Y-%m-%d)/*-$(date +%Y-%m-%d).7z -- pupkin@bk.ru backup_files_at_$(date +%Y-%m-%d)
zhekas, спасибо, оно самое. 

Еще 
mkdir -v /var/log/mutt
mkdir -v /var/spool/mutt
: > /var/log/mutt/mail
: > /var/log/mutt/sent
: > /var/log/mutt/postponed
: > /var/spool/mutt/mail
chmod -R 644 /var/log/mutt
chown -R root.root /var/log/mutt
chmod 755 /var/log/mutt
chown root.root /var/spool/mutt
chown root.root /var/spool/mutt/mail
chmod 755 /var/spool/mutt
chmod 644 /var/spool/mutt/mail

и добавляем в /root/.murrrc 

set folder=«/var/log/mutt/mail»
set spoolfile=«/var/spool/mutt/mail»
#set record=«/var/log/mutt/sent» - если добавить то не отправляет....
set postponed=«/var/log/mutt/postponed»

Конечный мой вариант:
/etc/ssmtp/ssmtp.conf
#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=vash@domen.ru

# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=smtp.yandex.ru:465

# Where will the mail seem to come from?
#rewriteDomain=

# The full hostname
hostname=Server

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
#FromLineOverride=YES

UseTLS=Yes
AuthUser=info@jhfkjhgkutsikhgruck.ru
AuthPass=75486jfhfk
FromLineOverride=Yes
/etc/ssmtp/revaliases
# sSMTP aliases
#
# Format:       local_account:outgoing_address:mailhub
#
# Example: root:your_login@your.domain:mailhub.your.domain[:port]
# where [:port] is an optional port number that defaults to 25.
#for yandex
root:mail@domen.ru:smtp.yandex.ru:465
/root/.muttrc
set sendmail="/usr/sbin/ssmtp"
set realname="Daily Sale Report"
set from="info@jhfkjhgkutsikhgruck.ru"
set folder=«/var/log/mutt/mail»
set spoolfile=«/var/spool/mutt/mail»
#set record=«/var/log/mutt/sent»
set postponed=«/var/log/mutt/postponed»
/etc/weekly_report_usa
#!/bin/bash
if [ -d /mnt/0000000000/smsgate/ ]; then
echo "Existing buffer directory" | tee /var/log/mail.log
else
mkdir -p -m 777 /mnt/0000000000/smsgate/
echo "Created buffer created" | tee /var/log/mail.log
fi
echo "Send mail to xxx@xxx.com, yyy@yyy.ru" | tee /var/log/mail.log
echo "" | mutt -x -s "Weekly Report UTS" -a /mnt/0000000000/smsgate/WeeklyReport.xls -- xxx@yyy.com
echo "" | mutt -x -s "Weekly Report UTS " -a /mnt/0000000000/smsgate/WeeklyReport.xls -- xxx@yyy.ru
echo "Remove report.XLS file"
rm /mnt/0000000000/smsgate/WeeklyReport.xls

/etc/crontab

0 /2 * * 1 root /bin/bash /etc/weekly_report_usa

 

NTP

Настраиваем в локальной сети сервер точного времени NTP

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

Наиболее популярной программой сервера точного времени является демон ntpd из пакета ntp. Ntp обычно устанавливать не требуется, программа уже входит в минимальный набор программ устанавливаемый вместе с системой.

Конфигурация сервера достаточно проста — создаем файл /etc/ntpd.conf с таким содержимым


#сервера синхронизации времени. 0 сервер выбран основным
server 0.pool.ntp.org iburst prefer
server 1.pool.ntp.org iburst
server 2.pool.ntp.org iburst
server 3.pool.ntp.org iburst

#Файл смещения - корректирует отклонение времени системных часов
driftfile /var/db/ntpd.drift
#логфайл демона ntpd
logfile /var/log/ntp.log

#разрешаем доступ на изменение времени через локальный интерфейс
restrict 127.0.0.1
# Разрешаем менять наше время с серверов с которыми сверяемся
restrict 0.pool.ntp.org noquery notrap
restrict 1.pool.ntp.org noquery notrap
restrict 2.pool.ntp.org noquery notrap
restrict 3.pool.ntp.org noquery notrap

#сервер времени может принимать запросы только из локальной сети
restrict 192.168.0.0 mask 255.255.0.0 nomodify notrap nopeer

Сервера точного времени с которыми мы собираемся сверяться лучше выбирать из своей временной зоны. Список серверов можно посмотреть здесь.

Вот и вся настройка, от root или sudo запускаем сервер, если он не был запущен


#ntpd -c /etc/ntp.conf

если был запущен, как это обычно бывает в debian и ubuntu — перезапускаем ntpd


#sudo /etc/init.d/ntp restart

Убедимся что в логе /var/log/ntp.log нет ошибок и демон корректно запустился. Теперь надо подождать минут 15-20, пока пройдет полная синхронизация времени между вашим сервером и серверами интернет.
Проверяем сервера синхронизации. «+» показывает тот сервер с которым в последний раз была синхронизация


# ntpq -c peers
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*host-81.200.8.2 82.219.4.31      3 u   41  256  377   25.596   -3.286   0.181
+ns.mipt.ru      62.117.76.138    2 u  117  128  377   16.996    0.371   0.331
-95.140.94.2     193.79.237.14    2 u  111  128  377    9.457    5.808   0.349
+ddt2.static.cor 192.36.143.151   2 u  108  128  377   51.185   -5.608   1.775

Запрос на синхронизацию с самим собой


#ntpdate -q localhost
server 127.0.0.1, stratum 4, offset -0.000003, delay 0.02562
27 Sep 17:16:23 ntpdate[16306]: adjust time server 127.0.0.1 offset -0.000003 sec

Самой лучшей проверки работы сервера времени будет успешная синхронизация времени клиентского компьютера. Для клиентов ОС unix выполняем команду от root или sudo


#ntpdate <сервер времени>
например
# ntpdate gw
27 Sep 15:44:15 ntpdate[32159]: adjust time server 192.168.0.1 offset -0.272284 sec

Сервер работает и отдает правильное время — задача выполнена. Добавим загрузку демона в стартовые скрипты ОС и при необходимости открываем порт 123 udp.
Для FreeBSD


add pass udp from any to me 123 via <интерфейса_нашего_сервера>
add pass udp from me 123 to any via <интерфейса_нашего_сервера>

Для Linux


#пердполагается что все исходящее у нас разрешено по умолчанию
iptables -A INPUT -p udp -s 0/0 --sport 123 -d <ip_интерфейса_нашего_сервера> \
 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT

В большинстве linux дистрибутивов что-то дополнительно для прописывания в запуск не требуется, это делается автоматически при установке пакета ntp.
Для FreeBSD добавим в /etc/rc.conf


ntpd_enable="YES"
ntpd_config="/etc/ntp/ntp.conf"
ntpd_sync_on_start="YES"

Для сети с доменом из win машин в GPO AD указываем включение сервиса времени на всех ПК, и указать сервер с кем синхронизироваться.

Спасибо: http://ruunix.ru/1231-nastraivaem-v-lokalnoj-seti-server-tochnogo-vremeni.html

Windows server 2003

regedit > HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers

Сервер синхронизации времени ntp может работать на Windows 2000, Windows XP Prof, Windows Server 2003/2008 .

Итак, приступаем к настойке.

Начнем с ОС Windows XP Prof (Windows XP Home — то же самое).

Открываем реестр — Пуск -> выполнить -> regedit
идем в ветку:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControl\Set\Services\W32Time\Config

присваеваем параметру AnnounceFlags значение 5. Тем самым мы обьявим наш будущий NTP сервер, достоверным и компьютеры при синхронизации с ним не будут ругаться.
Далее Пуск -> выполнить -> mmc и добавляем оснастку «Редактор обьекта групповой полтики». Обьектом группвой политики выступит Локальный компьютер.

Идем по разделам Конфигурация компьютера -> Администрантивные шаблоны -> Система -> Служба времени Windows -> Поставщики времени. Там находим «Включить Windows NTP-сервер» и в свойствах выбираем позицию «включить». В заключении проходим в Службы, ищем «Служба времени Windows» и перезапускаем этот сервис. Если он не включен, то включаем его и ставим тип запуска «Авто».

Кроме этого на раздающем сервере необходимо изменить интервал через который он сам будет ходить в инет за временем.
Открываем реестр — Пуск -> выполнить -> regedit
идем в ветку:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\
NtpClient\SpecialPollInterval

По умолчанию интервал между обновлениями времени в Windows – 1 неделя (604800 сек). При низкой точности системных часов компьютера это слишком большой интервал. При такой настройке за 1 неделю часы Вашего компьютера могут получить погрешность величиной порядка минуты или даже нескольких минут. Рекомендую уменьшить интервал обновления до нескольких часов. Это изменение не увеличит ни трафика, ни нагрузки на NTP-сервер, при этом позволит поддерживать более высокую точность хода часов Вашего компьютера.

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

w32tm /config /update

И при необходимости выполнить немедленную синхронизацию

w32tm /resync

На этом настройка сервера закончена.

На клиентских компьютерах следуем в «Панель управления», тыкаем в «дата и время» и в закладке «Время интернета» меняем строку сервер на свой локальный сервер.
Вот и все.

Можно раскидать батник на рабочие станции:
w32tm /config /manualpeerlist:IP_адрес_сервера,0x1 /syncfromflags:MANUAL
net stop w32time
net start w32time
w32tm /resync

И запускаем его на клиентских машинах с правами Администратора.

Спасибо: http://www.korolevskiy.com/blog/90-server-sinxronizaczii-vremeni-v-lokalnoj-seti-windows.html

Scripts antivirus

root@shop:~# cat scan_update 
#! /bin/bash
date=`date +"%Y_%m_%d"`
DIR=/root/log/$date
mailbox=dmurrdj@gmail.com
num=0

if [ -d /root/log ]; then
        echo "Directory log existing"
else
        mkdir  -p -m 777 /root/log
fi
# Создание папки для логов
	mkdir -p -m 777 $DIR
# Обновление rkhunter
	rkhunter --update | tee $DIR/rkhunter_update.log
# Сканирование rkhunter мини 
	rkhunter -c --sk --rwo --summary | tee $DIR/rkhunter_scan_mini.log
# Сканирование rkhunter полное
	rkhunter -c --sk --summary | tee $DIR/rkhunter_scan_max.log
# Сканирование chrootkit
	chkrootkit | tee $DIR/chrootkit_scan.log
# Включение обновление clamav
	/etc/init.d/clamav-freshclam start | tee $DIR/clamav_update.log
# Обновление баз clamav
	freshclam | tee $DIR/clamav_update.log
# Выключение обновление clamav
	/etc/init.d/clamav-freshclam stop | tee $DIR/clamav_update.log
# Сканирование БЕЗ УДАЛЕНИЯ ФАЙЛОВ
	clamscan -ri --scan-html --scan-elf --scan-pdf --scan-archive --bytecode / | tee $DIR/clamav_scan_wo_del.log
# Включение avg
	/etc/init.d/avgd start | tee $DIR/avg_update.log
# Обновление avg
	avgupdate | tee $DIR/avg_update.log
# Сканирование avg
	avgscan --arc --pup2 --coo --media --ignerrors --report $DIR/avg_scan_wo_del.log  /
# Выключение avg
	/etc/init.d/avgd stop | tee $DIR/avg_update.log

ip_addr=$(ip -4 addr show | tail -n1 | tr '\t' ' ' | tr -s ' ' | cut -d ' ' -f 3 | cut -d '/' -f 1)  
touch $DIR/summary.txt
chmod 777 $DIR/summary.txt
echo $ip_addr >> $DIR/summary.txt
echo $(hostname) >> $DIR/summary.txt
echo "==============================================================================" >> $DIR/summary.txt
echo "Summary scan" >> $DIR/summary.txt
echo "Scan rkhunter" >> $DIR/summary.txt
tail -n15 $DIR/rkhunter_scan_mini.log | tee $DIR/summary.txt
rootkit_num=$(cat $DIR/rkhunter_scan_mini.log | grep "Possible rootkits:" | tr '\t' ' ' | tr -s ' ' | cut -d ' ' -f 4)
	if [ $rootkit_num -ne 0 ]; then
	num=$(($num + 1))
	fi
echo "==============================================================================" >> $DIR/summary.txt
# Summary scan Clamav
echo "Scan clamav" >> $DIR/summary.txt
cat $DIR/clamav_scan_wo_del.log >> $DIR/summary.txt
clamav_num=$(cat $DIR/clamav_scan_wo_del.log | grep "Infected files" | tr '\t' ' ' | tr -s ' ' | cut -d ' ' -f 3)
	if [ $clamav_num -ne 0 ]; then
        num=$(($num + 2))
        fi
echo "==============================================================================" >> $DIR/summary.txt
# Summary scan AVG
echo "Scan AVG" >> $DIR/summary.txt
cat $DIR/avg_scan_wo_del.log >> $DIR/summary.txt
avg_num=$(cat $DIR/avg_scan_wo_del.log | grep "Infections found" |  tr '\t' ' ' | tr -s ' ' | cut -d ' ' -f 4 | cut -d "(" -f 1)
        if [ $avg_num -ne 0 ]; then
        num=$(($num + 4))
        fi
echo "==============================================================================" >> $DIR/summary.txt

last -a >> $DIR/summary.txt

# Send Email
#num=$(($rootkit_num + $clamav_num + $avg_num))
case $num in
        "0" )
                cat $DIR/summary.txt | mail -s "NORMAL - $ip_addr $(hostname) - Scan Antivir $ Rootkit" $mailbox
        ;;
        "1" )
                cat $DIR/summary.txt | mail -s "WARNING - RKHUNTER $ip_addr $(hostname) - Scan Antivir $ Rootkit" $mailbox
        ;;
        "2" )
                cat $DIR/summary.txt | mail -s "WARNING - CLAMAV $ip_addr $(hostname) - Scan Antivir $ Rootkit" $mailbox
        ;;
        "3" )
                cat $DIR/summary.txt | mail -s "WARNING - RKHUNTER & CLAMAV $ip_addr $(hostname) - Scan Antivir $ Rootkit" $mailbox
        ;;
        "4" )
                cat $DIR/summary.txt | mail -s "WARNING - AVG $ip_addr $(hostname) - Scan Antivir $ Rootkit" $mailbox
        ;;
        "5" )
                cat $DIR/summary.txt | mail -s "WARNING - RKHUNTER & AVG $ip_addr $(hostname) - Scan Antivir $ Rootkit" $mailbox
        ;;
        "6" )
                cat $DIR/summary.txt | mail -s "WARNING - CLAMAV & AVG $ip_addr $(hostname) - Scan Antivir $ Rootkit" $mailbox
        ;;
        "7" )
                cat $DIR/summary.txt | mail -s "WARNING - RKHUNTER & CLAMAV & AVG $ip_addr $(hostname) - Scan Antivir $ Rootkit" $mailbox
        ;;
	* )
                cat $DIR/summary.txt | mail -s "WARNING - Anknown summary works  $ip_addr $(hostname) - Scan Antivir $ Rootkit" $mailbox
        ;;
esac

# Create log archive
tar cjvf $DIR.tar.bz2 $DIR
rm -r $DIR

Debian 7 Long Live!!!

My Debian