Настройка cron

Настройка Cron

Для настройки времени, даты и интервала когда нужно выполнять задание используется специальный синтаксис файла cron и специальная команда. Конечно, вы всегда можете отредактировать файл /etc/crontab, но этого делать не рекомендуется. Вместо этого, есть команда crontab:

Ее всегда желательно выполнять с опцией -e, тогда для редактирования правил будет использован ваш текстовый редактор по умолчанию. Команда открывает вам временный файл, в котором уже представлены все текущие правила cron и вы можете добавить новые. После завершения работы команды cron файл будет обработан и все правила будут добавлены в /var/spool/cron/crontabs/имя_пользователя причем добавленные процессы будут запускаться именно от того пользователя, от которого вы их добавляли.

Поэтому тут нужно быть аккуратным, и если вам нужно выполнять скрипты от рута, то и crontab нужно выполнить от рута, а не от пользователя. Это часто становиться причиной проблем.

Синтаксис crontab

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

минута час день месяц день_недели /путь/к/исполняемому/файлу

Нужно сказать, что обязательно нужно писать полный путь к команде, потому что для команд, запускаемых от имени cron переменная среды PATH будет отличаться, и сервис просто не сможет найти вашу команду. Это вторая самая распространенная причина проблем с Cron. Дата и время указываются с помощью цифр или символа ‘*’. Этот символ означает, что нужно выполнять каждый раз, если в первом поле — то каждую минуту и так далее. Ну а теперь перейдем к примерам.

Примеры настройки cron

Сначала можно посмотреть задачи cron для суперпользователя, для этого можно воспользоваться опцией -l:

Вы можете удалить все существующие задачи командой -r:

Давайте предположим, что нам нужно запускать от имени суперпользователя наш скрипт по адресу /usr/local/bin/serve. Какой-нибудь обслуживающий скрипт. Самый простой пример — запускать его каждую минуту:

Далее, усложним, будем запускать каждый час, в нулевую минуту:

Еще дальше:

Запускаем в нулевую минуту нулевого часа, каждый день, это в 12 ночи:

Если идти так дальше, то можно запускать в первый день каждого месяца:

Можно в любой день, например, 15 числа:

В первый день недели первого месяца года, 0 часов 0 минут:

Или в нулевой день недели каждого месяца:

Вы можете выбрать любую минуту, час и день недели, например, 15.30 во вторник:

Понедельник считается первым днем, воскресенье — это седьмой или нулевой день. Еще можно писать сокращенное название дня недели, например sun — воскресенье:

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

Если нужно запустить команду несколько раз, можно использовать разделитель «,». Например, запустим скрипт в 5 и 35 минут пятого (16:05 и 16:35), каждый день:

Вы можете захотеть не указывать отдельно время, а просто указать интервал, с которым нужно запускать скрипт, например, раз в 10 минут. Для этого используется разделитель косая черта — «/»:

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

  • @reboot — при загрузке, только один раз;
  • @yearly, @annually — раз год;
  • @monthly — раз в месяц;
  • @weekly — раз в неделю;
  • @daily, @midnight — каждый день;
  •  @hourly — каждый час.

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

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

Скрипт должен выглядеть подобным образом. Теперь вы знаете как настроить cron, осталось проверить как все работает.

Отладка работы

После того как вы настроили правила, еще хотелось бы проверить работают ли они. Для этого ждем того времени, когда скрипт уже должен быть выполнен и смотрим лог cron. Иногда он находится в /var/log/cron, а иногда пишется в syslog. Например, у меня в crontab есть такая строка:

Она должна выполняться в 19.40 каждый день, теперь смотрим лог:

И видим что в нашем логе она действительно есть и выполняется целиком успешно. Если бы были какие-либо ошибки, то тут же было бы выведено сообщение.

Если нужно проверить скрипт, который находится в одной из специализированных папок, то тут еще проще, просто запустите run-paths, передав ей в параметр нужную папку или даже сам скрипт:

Дальше вы увидите весь вывод, включая вывод скрипта и сможете быстро понять в чем проблема.

Настройка Cron

Для настройки времени, даты и интервала когда нужно выполнять задание используется специальный синтаксис файла cron и специальная команда. Конечно, вы всегда можете отредактировать файл /etc/crontab, но этого делать не рекомендуется. Вместо этого, есть команда crontab:

Ее всегда желательно выполнять с опцией -e, тогда для редактирования правил будет использован ваш текстовый редактор по умолчанию. Команда открывает вам временный файл, в котором уже представлены все текущие правила cron и вы можете добавить новые. После завершения работы команды cron файл будет обработан и все правила будут добавлены в /var/spool/cron/crontabs/имя_пользователя причем добавленные процессы будут запускаться именно от того пользователя, от которого вы их добавляли.

Поэтому тут нужно быть аккуратным, и если вам нужно выполнять скрипты от рута, то и crontab нужно выполнить от рута, а не от пользователя. Это часто становится причиной проблем.

Синтаксис crontab

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

минута час день месяц день_недели /путь/к/исполняемому/файлу

Нужно сказать, что обязательно нужно писать полный путь к команде, потому что для команд, запускаемых от имени cron переменная среды PATH будет отличаться, и сервис просто не сможет найти вашу команду. Это вторая самая распространенная причина проблем с Cron. Дата и время указываются с помощью цифр или символа ‘*’. Этот символ означает, что нужно выполнять каждый раз, если в первом поле — то каждую минуту и так далее. Ну а теперь перейдем к примерам.

Примеры настройки cron

Сначала можно посмотреть задачи cron для суперпользователя, для этого можно воспользоваться опцией -l:

Вы можете удалить все существующие задачи командой -r:

Давайте предположим, что нам нужно запускать от имени суперпользователя наш скрипт по адресу /usr/local/bin/serve. Какой-нибудь обслуживающий скрипт. Самый простой пример — запускать его каждую минуту:

Далее, усложним, будем запускать каждый час, в нулевую минуту:

Еще дальше:

Запускаем в нулевую минуту нулевого часа, каждый день, это в 12 ночи:

Если идти так дальше, то можно запускать в первый день каждого месяца:

Можно в любой день, например, 15 числа:

В первый день недели первого месяца года, 0 часов 0 минут:

Или в нулевой день недели каждого месяца:

Вы можете выбрать любую минуту, час и день недели, например, 15.30 во вторник:

Понедельник считается первым днем, воскресенье — это седьмой или нулевой день. Еще можно писать сокращенное название дня недели, например sun — воскресенье:

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

Если нужно запустить команду несколько раз, можно использовать разделитель «,». Например, запустим скрипт в 5 и 35 минут пятого (16:05 и 16:35), каждый день:

Вы можете захотеть не указывать отдельно время, а просто указать интервал, с которым нужно запускать скрипт, например, раз в 10 минут. Для этого используется разделитель косая черта — «/»:

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

  • @reboot — при загрузке, только один раз;
  • @yearly, @annually — раз год;
  • @monthly — раз в месяц;
  • @weekly — раз в неделю;
  • @daily, @midnight — каждый день;
  •  @hourly — каждый час.

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

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

Скрипт должен выглядеть подобным образом. Теперь вы знаете как настроить cron, осталось проверить как все работает.

Отладка работы

После того как вы настроили правила, еще хотелось бы проверить работают ли они. Для этого ждем того времени, когда скрипт уже должен быть выполнен и смотрим лог cron. Иногда он находится в /var/log/cron, а иногда пишется в syslog. Например, у меня в crontab есть такая строка:

Она должна выполняться в 19.40 каждый день, теперь смотрим лог:

И видим что в нашем логе она действительно есть и выполняется целиком успешно. Если бы были какие-либо ошибки, то тут же было бы выведено сообщение.

Если нужно проверить скрипт, который находится в одной из специализированных папок, то тут еще проще, просто запустите run-paths, передав ей в параметр нужную папку или даже сам скрипт:

Дальше вы увидите весь вывод, включая вывод скрипта и сможете быстро понять в чем проблема.

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 Знак процента (`%’ ) в команде (если он не экранирован обратной косой чертой (`’ ) ) будет соответствовать символу перевода строки и все данные после первого `%’  будут посланы для команды на стандартный ввод.

Копирование числовых ячеек из 1С в Excel Промо

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

Будущее сисадмина

DevOps или DevSecOps — специализация на стыке разработки, администрирования и безопасности

На данный момент внимание к DevOps только растёт и этот тренд продолжится, развиваясь в сторону контейнеризации, нагруженных приложений и систем, микросервисной архитектуры и т.д. Изучайте всё это, пока это выглядит как наиболее приоритетное будущее. 
Информационная безопасность — ещё одно направление развития

Если раньше инфобезопасники были только в телекоме и банках, то сегодня они нужны практически в любой ИТ-компании. Сфера непростая, потребует знаний в разработке, системах взлома и защиты, — это гораздо глубже, чем установить антивирус и настроить файервол. И, кстати, для инфобеза есть отдельные специальности в вузах, поэтому если вы в начале пути, можно сразу поступать по профилю, а если «старичок», то можно рассмотреть магистратуру для углубления знаний и наличия диплома.
CTO, CIO — руководящие должности в ИТ-сфере или ИТ-подразделениях компаний. Отличный путь для тех, кто кроме системного мышления и любви к технологиям имеет управленческие и финансовые способности. Вы будете руководить всей ИТ-инфраструктурой, проводить сложные внедрения, выстраивать архитектуры для бизнеса, и это, само собой, очень неплохо оплачивается. Однако, как показывает практика, CTO/CIO в крупной компании — это ещё и умение договариваться, объяснять, обосновывать и пробивать бюджеты, это колоссальные нервы и ответственность.
Открыть своё дело. Например, заняться системным администрированием и поддержкой компаний как аутсорсер. Тогда вы сможете выстраивать свой график, планировать доходность и занятость, предоставлять те услуги, которые у вас выходят особенно круто. Но это непростой путь как с точки зрения набора и удержания клиентской базы, так и с точки зрения управления, финансов и права. 

Настройка CRON с Osclass

Мы используем cron.php для выполнения некоторых вычислений и потребляют меньше ресурсов, чем вызов каждому из трех файлов по отдельности. В идеальном мире, каждый сервер будет иметь CRON включен, и вы сможете установить, как много cronjobs как вы хотите, а потому, что мы знаем, что это не всегда верно, мы предлагаем эту встроенную функциональность.

Настройка встроенных функций в OSClass

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

Чтобы использовать CRON функциональность вашей системы нужно снять автоматического крон вариант на панели управления, в соответствии с общими настройками> крон

Cron доступна только на Unix-системы (Linux, Mac должны быть, но я никогда не играл с ним). Большинство веб-серверов, там работает дистрибутив, то проблем не должно быть вообще. ОС Windows системы имеют несколько вариантов CRON, которые работают по-разному. Как правило, вам нужно SSH сервер (доступ через SSH) и типа командной строки / терминала,

crontab - е

Вы войдете в ваш «cronjob список» на терминал редактор (как правило, VI, Vim, нано-или Emacs). Тогда это зависит от редактора, чтобы сохранить, закрыть, редактировать сам файл, …

Большинство хостинговых компаний не будет предлагать доступ к SSH, и те, кто делают это, некоторые из них не будет предлагать вам возможность изменить CRON, но предлагаем вам обойти через панель администратора, чтобы сделать это. Например Dreamhost (под Goodies> Cron) предлагаем вам «простой мастер», чтобы запустить cronjobs, но ограничивает вас в один cronjob на одного абонента (через терминал / SSH у вас нет ограничений).

Мы не можем предоставить вам более подробную информацию, поскольку она сильно зависит от хостинга / сервера.

Хрон нужен промежуток времени / время и команду, которая будет выполнена, что-то вроде (на самом деле, более подробные на вики, я не буду говорить о различных опциях времени)

 Команда параметрами

В нашем случае, мы хотим, чтобы выполнить PHP-файл, мы должны быть установлены PHP-CLI или PHPCGI-версии, которые являются исполняемые файлы PHP. (Примечание: Некоторые сервера будет только версия Apache Mod РНР, так как производительность медленнее с модом версии, а также имеют несколько меньше возможностей, Странно, что некоторые сервера не имеют, но это может произойти, спросите вашего хостинг компании!). Ну, нам нужно запустить CLI (интерфейс командной строки или исполняемый файл) версии PHP, мы должны использовать полный путь (ваш phpinfo может помочь вам в этом, или попросите вашего хостинг-провайдера!), То мы должны пройти, как параметр или аргумент PHP файл, используйте полный путь снова (ПРИМЕЧАНИЕ: Как правило, общий сервер использовать домашний каталог держать своих пользователей и веб-сайтов, так что ваш путь будет / Главная / ваш_логин / public_html, опять же, «public_html» является одним из наиболее часто используемые папки, но она может быть разной, как веб-сайт, yourdomain.com или ничего. Кроме того, если у вас есть выделенный сервер, веб-путь, вероятно, / var / WWW)

Весь cronjob должен выглядеть следующим образом

0 **** USR / местные / php5 / бен / PHP / Главная / ваш_логин / public_html / ос - включает / osclass / cron PHP.

Установите для работы на каждый час часов

Таким образом, хостинг-провайдеры, как Dreamhost, предлагаем Вам мастер, так что вам нужно только ввести

/ USR / местные / php5 / бен / PHP / Главная / ваш_логин / public_html / ос - включает / osclass / cron PHP.

и выберите «Каждый час»

Различные настройки В лучшем случае

Вы можете запускать столько cronjobs как вы хотите. В этом случае, набор 3 cronjobs и выполнять файлы oc-includes/osclass/cron.hourly.php, oc-includes/osclass/cron.daily.php и oc-includes/osclass/cron.weekly.php индивидуально в cronjob . Не забудьте снять Общие параметры> Cron> Авто-крон

Не все так плохо дела escenario

Вы можете работать только один cronjob. В таком случае, выполните oc-includes/osclass/cron.php в cronjob не забудьте снять Общие параметры> Cron> Авто-крон

Вы не можете установить любую cronjob, не хотят или не умеют

Getting Started with Crontab

To edit or create a crontab file for the currently logged in user, issue following command:

crontab -e

This will open crontab file in your favorite editor located at /var/spool/cron/crontabs/edward (edward is our username in this example, it may differ in your case). Output of the above command will be (our editor here is nano):

To specify a task to run at a particular time, you have to enter the following six fields separated by a space.

Crontab Fields and Allowed Ranges

Field

Description

Allowed Value

MIN

Minute Field

0-59

HOUR

Hour Field

0-23

DOM

Day of Month

1-31

MON

Month Field

1-12

DOW

Day of Week

0-6

CMD

Command

Any command to be Executed

Any of these fields can also be set using the wildcard character (*), which stands for «first through last». For example, to run a job every hour, put * in the hour field. You can also specify range of numbers in all five fields related to date and time. Ranges are two numbers separated with a hyphen. For instance, 5-8 in hours field specifies execution at hours 5, 6, 7 and 8.

Let’s create a practical example of scheduling with crontab. We have a small script file that will ping www.google.com at 14:22 on Sep 8th regardless of the day of week. We create a shell script with the following content and place it in /tmp/bill.sh.

cat /tmp/bill.sh

Script Content:

#!/bin/bash
ping "www.google.com"

In order to run this script at the scheduled date and time, we enter the correct fields in our Crontab file:

The above screenshot shows that we’ve now configured our crontab to run this script at 14:22 on Sep 8th. Save and exit and you will recieve a message that the Crontab has been updated.

Here is another example: The following line will run our script every hour, at the top of the hour, from 6 A.M to 10 AM every day:

0 6-10 * * * /tmp/bill.sh

To just print the Crontab file for the currently logged in user on screen, you can use the following command:

crontab -l

This shows that only one cron job is scheduled on the system. You can schedule more than one job. by simply adding more lines to your Crontab file To remove entries in  the cron table just edit your Crontab as before and remove or comment out the line

By default, crontab edit entries of current logged in user. If you want to edit Crontab for another user, use the following command:

crontab -u username -e

You can also use the following command to view crontab entries of the other user:

crontab -u username -l

Обучение

Как видно из написанного выше, далеко не все области, как  и не все «ветки развития» в популярных RPG открываются сразу. Есть ряд моментов, имеющих общее начало. И только начиная с определенного этапа развития, допускающих ветвление.

Например — сложно представить себе администратора систем виртуализации на базе контейнеров (тот же Docker) или KVM (Proxmox, oVirt и пр), которые не владели бы хотя бы базовым уровнем администрирования Linux. Или сложно представить себе администратора операционных систем Microsoft, занимающегося планированием нового леса Active Directory, не имеющего даже базового представления  о сетевых технологиях.

Вот почему я хочу поделиться материалами, изучение которых позволит заложить прочный фундамент в той или иной «базовой» области, позволив а дальнейшем Вам, как специалисту(ам) расти и развиваться.  Вектор Вы уже выберете сами.

Английский

Английский язык, это один из основополагающих скилов для любого айтишника. Очень скоро Вы понимаете, что объем материалов на русском языке скуден. А толковых еще меньше. Если из толковых мы отберем те, что еще не успели устареть — остается просто пшик. Вот и получается, что знать английский необходимо как минимум для того, чтобы пользоваться хорошей и актуальной документацией. Читать хорошие книги на айти тематику на языке оригинала сразу после выхода в печать, а не ждать 3-5 лет, когда ее переведут ( и она устареет), если вообще дождаться перевода.

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

Итак, английский знать надо. Не просто надо, а НАДО!!!! Но что делать, если у Вас с ним плохо? Учить самому. Пойти на курсы, найти репетитора… И конечно проводить самостоятельное обучение. Небольшое отступление — как понять, какой у Вас уровень английского? Вот Вам пара таблиц, описывающих наиболее популярную классификацию:

Итак, что же касается самостоятельного обучения… Я думаю с одной стороны, Вам поможет пара обучающих (а скорее посвящающих) видео от GeekBrains:

Если с базой у Вас совсем плохо ( ну мало ли что у кого было в школе) — есть много очень интересных видео курсов, например «Полиглот» — английский за 16 часов:

https://youtube.com/watch?v=y9fFDpSqKdQ

В дополнение к этому курсу видео, на том же канале есть небольшие дополнения:

  1. Повторите английский по сокращенным урокам
  2. Посмотрите тематические выпуски английского
  3. Пересмотрите расширенные уроки английского

Отчет

У Cron существует настройка, чтобы настроить уведомления о его работе на электронную почту. Это особенно полезно, если при работе случится какая-либо ошибка. Чтобы включить такие уведомления на почту, необходимо в crontab вписать строчку:

MAILTO= [email protected]

После MAILTO= указывается необходимая почта. Указать их можно сразу несколько, перечислив через запятую. Теперь, если вдруг случится ошибка, вы будете проинформированы об этом. При чем, к вам на почту будут приходить и результаты работы скриптов. Однако, если данная функция вам мешает, ее можно и отключить, введя в конце задачи команду > /dev/null 2>&1.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: