Настройка cron задач и планировщика — различия между версиями

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к: навигация, поиск
(Новая страница: «= Настройка cron задач и планировщика = == 1. Подготовка системы == * Войдите в систему под уче…»)
 
 
Строка 6: Строка 6:
 
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
 
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
  
== 2. Установка и настройка cron ===
+
== 2. Установка и настройка cron ==
  
 
=== Проверка установки cron ===
 
=== Проверка установки cron ===
  
 
1. Проверьте, установлен ли cron:
 
1. Проверьте, установлен ли cron:
<code>which cron</code>
+
<pre>which cron</pre>
<code>systemctl status cron</code>
+
<pre>systemctl status cron</pre>
  
 
2. Если не установлен, установите:
 
2. Если не установлен, установите:
<code>sudo apt update</code>
+
<pre>sudo apt update</pre>
<code>sudo apt install -y cron</code>
+
<pre>sudo apt install -y cron</pre>
  
 
3. Запустите и включите автозапуск:
 
3. Запустите и включите автозапуск:
<code>sudo systemctl start cron</code>
+
<pre>sudo systemctl start cron</pre>
<code>sudo systemctl enable cron</code>
+
<pre>sudo systemctl enable cron</pre>
  
 
4. Проверьте статус:
 
4. Проверьте статус:
<code>sudo systemctl status cron</code>
+
<pre>sudo systemctl status cron</pre>
  
 
=== Настройка cron ===
 
=== Настройка cron ===
  
 
1. Отредактируйте crontab для root:
 
1. Отредактируйте crontab для root:
<code>sudo crontab -e</code>
+
<pre>sudo crontab -e</pre>
  
 
2. Отредактируйте crontab для текущего пользователя:
 
2. Отредактируйте crontab для текущего пользователя:
<code>crontab -e</code>
+
<pre>crontab -e</pre>
  
 
3. Просмотр текущих задач:
 
3. Просмотр текущих задач:
<code>crontab -l</code>
+
<pre>crontab -l</pre>
  
 
4. Удаление всех задач:
 
4. Удаление всех задач:
<code>crontab -r</code>
+
<pre>crontab -r</pre>
  
== 3. Синтаксис cron ===
+
== 3. Синтаксис cron ==
  
 
=== Формат времени ===
 
=== Формат времени ===
  
 
Cron использует следующий формат:
 
Cron использует следующий формат:
<code>минута час день месяц день_недели команда</code>
+
<pre>минута час день месяц день_недели команда</pre>
  
 
**Поля времени:**
 
**Поля времени:**
Строка 56: Строка 56:
  
 
1. '''Каждую минуту''':
 
1. '''Каждую минуту''':
<code>* * * * * команда</code>
+
<pre>* * * * * команда</pre>
  
 
2. '''Каждый час в 0 минут''':
 
2. '''Каждый час в 0 минут''':
<code>0 * * * * команда</code>
+
<pre>0 * * * * команда</pre>
  
 
3. '''Каждый день в 2:30 утра''':
 
3. '''Каждый день в 2:30 утра''':
<code>30 2 * * * команда</code>
+
<pre>30 2 * * * команда</pre>
  
 
4. '''Каждый понедельник в 9:00''':
 
4. '''Каждый понедельник в 9:00''':
<code>0 9 * * 1 команда</code>
+
<pre>0 9 * * 1 команда</pre>
  
 
5. '''Каждый месяц 1 числа в 12:00''':
 
5. '''Каждый месяц 1 числа в 12:00''':
<code>0 12 1 * * команда</code>
+
<pre>0 12 1 * * команда</pre>
  
 
6. '''Каждые 15 минут''':
 
6. '''Каждые 15 минут''':
<code>*/15 * * * * команда</code>
+
<pre>*/15 * * * * команда</pre>
  
 
7. '''С понедельника по пятницу в 18:00''':
 
7. '''С понедельника по пятницу в 18:00''':
<code>0 18 * * 1-5 команда</code>
+
<pre>0 18 * * 1-5 команда</pre>
  
 
8. '''В определенные дни месяца''':
 
8. '''В определенные дни месяца''':
<code>0 0 1,15 * * команда</code>
+
<pre>0 0 1,15 * * команда</pre>
  
== 4. Создание cron задач ===
+
== 4. Создание cron задач ==
  
 
=== Базовые задачи ===
 
=== Базовые задачи ===
  
 
1. '''Резервное копирование каждый день в 3:00''':
 
1. '''Резервное копирование каждый день в 3:00''':
<code>0 3 * * * /usr/local/bin/backup.sh</code>
+
<pre>0 3 * * * /usr/local/bin/backup.sh</pre>
  
 
2. '''Очистка логов каждую неделю''':
 
2. '''Очистка логов каждую неделю''':
<code>0 2 * * 0 /usr/local/bin/cleanup-logs.sh</code>
+
<pre>0 2 * * 0 /usr/local/bin/cleanup-logs.sh</pre>
  
 
3. '''Обновление системы каждую неделю''':
 
3. '''Обновление системы каждую неделю''':
<code>0 4 * * 1 /usr/bin/apt update && /usr/bin/apt upgrade -y</code>
+
<pre>0 4 * * 1 /usr/bin/apt update && /usr/bin/apt upgrade -y</pre>
  
 
4. '''Мониторинг дискового пространства''':
 
4. '''Мониторинг дискового пространства''':
<code>0 */6 * * * /usr/local/bin/disk-monitor.sh</code>
+
<pre>0 */6 * * * /usr/local/bin/disk-monitor.sh</pre>
  
 
=== Задачи с переменными окружения ===
 
=== Задачи с переменными окружения ===
  
 
1. '''Настройка переменных окружения''':
 
1. '''Настройка переменных окружения''':
<code>SHELL=/bin/bash
+
<pre>SHELL=/bin/bash
 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 
MAILTO=admin@example.com
 
MAILTO=admin@example.com
  
 
0 3 * * * /usr/local/bin/backup.sh
 
0 3 * * * /usr/local/bin/backup.sh
</code>
+
</pre>
  
 
2. '''Задача с перенаправлением вывода''':
 
2. '''Задача с перенаправлением вывода''':
<code>0 2 * * * /usr/local/bin/cleanup.sh >> /var/log/cleanup.log 2>&1</code>
+
<pre>0 2 * * * /usr/local/bin/cleanup.sh >> /var/log/cleanup.log 2>&1</pre>
  
 
=== Задачи с условиями ===
 
=== Задачи с условиями ===
  
 
1. '''Выполнение только в рабочие дни''':
 
1. '''Выполнение только в рабочие дни''':
<code>0 9 * * 1-5 /usr/local/bin/daily-report.sh</code>
+
<pre>0 9 * * 1-5 /usr/local/bin/daily-report.sh</pre>
  
 
2. '''Выполнение только в определенные месяцы''':
 
2. '''Выполнение только в определенные месяцы''':
<code>0 0 1 1,4,7,10 * /usr/local/bin/quarterly-task.sh</code>
+
<pre>0 0 1 1,4,7,10 * /usr/local/bin/quarterly-task.sh</pre>
  
== 5. Управление cron задачами ===
+
== 5. Управление cron задачами ==
  
 
=== Просмотр задач ===
 
=== Просмотр задач ===
  
 
1. '''Просмотр задач текущего пользователя''':
 
1. '''Просмотр задач текущего пользователя''':
<code>crontab -l</code>
+
<pre>crontab -l</pre>
  
 
2. '''Просмотр задач другого пользователя''':
 
2. '''Просмотр задач другого пользователя''':
<code>sudo crontab -l -u username</code>
+
<pre>sudo crontab -l -u username</pre>
  
 
3. '''Просмотр системных задач''':
 
3. '''Просмотр системных задач''':
<code>sudo cat /etc/crontab</code>
+
<pre>sudo cat /etc/crontab</pre>
  
 
4. '''Просмотр задач в /etc/cron.d/''':
 
4. '''Просмотр задач в /etc/cron.d/''':
<code>sudo ls -la /etc/cron.d/</code>
+
<pre>sudo ls -la /etc/cron.d/</pre>
  
 
=== Редактирование задач ===
 
=== Редактирование задач ===
  
 
1. '''Редактирование crontab''':
 
1. '''Редактирование crontab''':
<code>crontab -e</code>
+
<pre>crontab -e</pre>
  
 
2. '''Редактирование crontab другого пользователя''':
 
2. '''Редактирование crontab другого пользователя''':
<code>sudo crontab -e -u username</code>
+
<pre>sudo crontab -e -u username</pre>
  
 
3. '''Импорт задач из файла''':
 
3. '''Импорт задач из файла''':
<code>crontab /path/to/crontab-file</code>
+
<pre>crontab /path/to/crontab-file</pre>
  
 
=== Удаление задач ===
 
=== Удаление задач ===
  
 
1. '''Удаление всех задач пользователя''':
 
1. '''Удаление всех задач пользователя''':
<code>crontab -r</code>
+
<pre>crontab -r</pre>
  
 
2. '''Удаление задач другого пользователя''':
 
2. '''Удаление задач другого пользователя''':
<code>sudo crontab -r -u username</code>
+
<pre>sudo crontab -r -u username</pre>
  
 
3. '''Удаление конкретной задачи''':
 
3. '''Удаление конкретной задачи''':
 
Отредактируйте crontab и удалите нужную строку
 
Отредактируйте crontab и удалите нужную строку
  
== 6. Системные cron директории ===
+
== 6. Системные cron директории ==
  
 
=== /etc/crontab ===
 
=== /etc/crontab ===
  
 
1. Отредактируйте системный crontab:
 
1. Отредактируйте системный crontab:
<code>sudo nano /etc/crontab</code>
+
<pre>sudo nano /etc/crontab</pre>
  
 
2. Добавьте системные задачи:
 
2. Добавьте системные задачи:
<code># Системные задачи
+
<pre>\# Системные задачи
 
0 3 * * * root /usr/local/bin/system-backup.sh
 
0 3 * * * root /usr/local/bin/system-backup.sh
 
0 4 * * 0 root /usr/local/bin/weekly-maintenance.sh
 
0 4 * * 0 root /usr/local/bin/weekly-maintenance.sh
</code>
+
</pre>
  
 
=== /etc/cron.d/ ===
 
=== /etc/cron.d/ ===
  
 
1. Создайте файл для конкретного сервиса:
 
1. Создайте файл для конкретного сервиса:
<code>sudo nano /etc/cron.d/my-service</code>
+
<pre>sudo nano /etc/cron.d/my-service</pre>
  
 
2. Добавьте задачи:
 
2. Добавьте задачи:
<code>SHELL=/bin/bash
+
<pre>SHELL=/bin/bash
 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 
MAILTO=admin@example.com
 
MAILTO=admin@example.com
  
 
0 2 * * * root /usr/local/bin/service-backup.sh
 
0 2 * * * root /usr/local/bin/service-backup.sh
</code>
+
</pre>
  
 
=== Специальные директории ===
 
=== Специальные директории ===
Строка 190: Строка 190:
  
 
1. Создайте скрипт:
 
1. Создайте скрипт:
<code>sudo nano /etc/cron.daily/my-daily-script</code>
+
<pre>sudo nano /etc/cron.daily/my-daily-script</pre>
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>#!/bin/bash
+
<pre>\#!/bin/bash
# Ежедневная задача
+
\# Ежедневная задача
 
echo "Daily task executed at $(date)" >> /var/log/daily-task.log
 
echo "Daily task executed at $(date)" >> /var/log/daily-task.log
 
/usr/local/bin/backup.sh
 
/usr/local/bin/backup.sh
</code>
+
</pre>
  
 
3. Сделайте скрипт исполняемым:
 
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /etc/cron.daily/my-daily-script</code>
+
<pre>sudo chmod +x /etc/cron.daily/my-daily-script</pre>
  
== 7. Мониторинг и логирование ===
+
== 7. Мониторинг и логирование ==
  
 
=== Просмотр логов cron ===
 
=== Просмотр логов cron ===
  
 
1. '''Просмотр системных логов''':
 
1. '''Просмотр системных логов''':
<code>sudo tail -f /var/log/syslog | grep CRON</code>
+
<pre>sudo tail -f /var/log/syslog | grep CRON</pre>
  
 
2. '''Просмотр логов cron''':
 
2. '''Просмотр логов cron''':
<code>sudo tail -f /var/log/cron.log</code>
+
<pre>sudo tail -f /var/log/cron.log</pre>
  
 
3. '''Поиск ошибок в логах''':
 
3. '''Поиск ошибок в логах''':
<code>sudo grep "CRON" /var/log/syslog | grep -i error</code>
+
<pre>sudo grep "CRON" /var/log/syslog | grep -i error</pre>
  
 
=== Настройка уведомлений ===
 
=== Настройка уведомлений ===
  
 
1. '''Настройка MAILTO в crontab''':
 
1. '''Настройка MAILTO в crontab''':
<code>MAILTO=admin@example.com
+
<pre>MAILTO=admin@example.com
 
0 3 * * * /usr/local/bin/backup.sh
 
0 3 * * * /usr/local/bin/backup.sh
</code>
+
</pre>
  
 
2. '''Отключение уведомлений''':
 
2. '''Отключение уведомлений''':
<code>MAILTO=""
+
<pre>MAILTO=""
 
0 3 * * * /usr/local/bin/backup.sh
 
0 3 * * * /usr/local/bin/backup.sh
</code>
+
</pre>
  
 
3. '''Перенаправление вывода в файл''':
 
3. '''Перенаправление вывода в файл''':
<code>0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1</code>
+
<pre>0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1</pre>
  
 
=== Создание скрипта мониторинга ===
 
=== Создание скрипта мониторинга ===
  
 
1. Создайте скрипт мониторинга:
 
1. Создайте скрипт мониторинга:
<code>nano /usr/local/bin/cron-monitor.sh</code>
+
<pre>nano /usr/local/bin/cron-monitor.sh</pre>
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>#!/bin/bash
+
<pre>\#!/bin/bash
  
# Проверка статуса cron
+
\# Проверка статуса cron
 
if ! systemctl is-active --quiet cron; then
 
if ! systemctl is-active --quiet cron; then
 
     echo "CRON service is not running!" | mail -s "CRON Alert" admin@example.com
 
     echo "CRON service is not running!" | mail -s "CRON Alert" admin@example.com
 
fi
 
fi
  
# Проверка последнего выполнения задач
+
\# Проверка последнего выполнения задач
 
LAST_BACKUP=$(stat -c %Y /var/log/backup.log 2>/dev/null || echo 0)
 
LAST_BACKUP=$(stat -c %Y /var/log/backup.log 2>/dev/null || echo 0)
 
CURRENT_TIME=$(date +%s)
 
CURRENT_TIME=$(date +%s)
Строка 251: Строка 251:
 
     echo "Backup task has not run in the last 24 hours!" | mail -s "Backup Alert" admin@example.com
 
     echo "Backup task has not run in the last 24 hours!" | mail -s "Backup Alert" admin@example.com
 
fi
 
fi
</code>
+
</pre>
  
 
3. Сделайте скрипт исполняемым:
 
3. Сделайте скрипт исполняемым:
<code>chmod +x /usr/local/bin/cron-monitor.sh</code>
+
<pre>chmod +x /usr/local/bin/cron-monitor.sh</pre>
  
 
4. Добавьте в crontab:
 
4. Добавьте в crontab:
<code>0 */6 * * * /usr/local/bin/cron-monitor.sh</code>
+
<pre>0 */6 * * * /usr/local/bin/cron-monitor.sh</pre>
  
== 8. Продвинутые настройки ===
+
== 8. Продвинутые настройки ==
  
 
=== Использование anacron ===
 
=== Использование anacron ===
  
 
1. Установите anacron:
 
1. Установите anacron:
<code>sudo apt install -y anacron</code>
+
<pre>sudo apt install -y anacron</pre>
  
 
2. Настройте anacron:
 
2. Настройте anacron:
<code>sudo nano /etc/anacrontab</code>
+
<pre>sudo nano /etc/anacrontab</pre>
  
 
3. Добавьте задачи:
 
3. Добавьте задачи:
<code># /etc/anacrontab
+
<pre>\# /etc/anacrontab
 
SHELL=/bin/sh
 
SHELL=/bin/sh
 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 
MAILTO=root
 
MAILTO=root
  
# Задачи anacron
+
\# Задачи anacron
 
1 5 cron.daily run-parts /etc/cron.daily
 
1 5 cron.daily run-parts /etc/cron.daily
 
7 10 cron.weekly run-parts /etc/cron.weekly
 
7 10 cron.weekly run-parts /etc/cron.weekly
 
@monthly 15 cron.monthly run-parts /etc/cron.monthly
 
@monthly 15 cron.monthly run-parts /etc/cron.monthly
</code>
+
</pre>
  
 
=== Использование at ===
 
=== Использование at ===
  
 
1. Установите at:
 
1. Установите at:
<code>sudo apt install -y at</code>
+
<pre>sudo apt install -y at</pre>
  
 
2. Запустите atd:
 
2. Запустите atd:
<code>sudo systemctl start atd</code>
+
<pre>sudo systemctl start atd</pre>
<code>sudo systemctl enable atd</code>
+
<pre>sudo systemctl enable atd</pre>
  
 
3. Планирование разовых задач:
 
3. Планирование разовых задач:
<code>echo "backup.sh" | at 3:00 tomorrow</code>
+
<pre>echo "backup.sh" | at 3:00 tomorrow</pre>
<code>echo "maintenance.sh" | at now + 1 hour</code>
+
<pre>echo "maintenance.sh" | at now + 1 hour</pre>
  
 
4. Просмотр очереди at:
 
4. Просмотр очереди at:
<code>atq</code>
+
<pre>atq</pre>
  
 
5. Удаление задачи из очереди:
 
5. Удаление задачи из очереди:
<code>atrm job_number</code>
+
<pre>atrm job_number</pre>
  
== 9. Безопасность cron ===
+
== 9. Безопасность cron ==
  
 
=== Ограничение доступа ===
 
=== Ограничение доступа ===
  
 
1. '''Разрешить cron только определенным пользователям''':
 
1. '''Разрешить cron только определенным пользователям''':
<code>sudo nano /etc/cron.allow</code>
+
<pre>sudo nano /etc/cron.allow</pre>
<code>root
+
<pre>root
 
admin
 
admin
 
backup-user
 
backup-user
</code>
+
</pre>
  
 
2. '''Запретить cron определенным пользователям''':
 
2. '''Запретить cron определенным пользователям''':
<code>sudo nano /etc/cron.deny</code>
+
<pre>sudo nano /etc/cron.deny</pre>
<code>guest
+
<pre>guest
 
test-user
 
test-user
</code>
+
</pre>
  
 
=== Проверка безопасности ===
 
=== Проверка безопасности ===
  
 
1. '''Проверка прав доступа к crontab файлам''':
 
1. '''Проверка прав доступа к crontab файлам''':
<code>ls -la /var/spool/cron/crontabs/</code>
+
<pre>ls -la /var/spool/cron/crontabs/</pre>
  
 
2. '''Проверка системных cron файлов''':
 
2. '''Проверка системных cron файлов''':
<code>ls -la /etc/cron.d/</code>
+
<pre>ls -la /etc/cron.d/</pre>
  
 
3. '''Проверка исполняемых файлов в cron директориях''':
 
3. '''Проверка исполняемых файлов в cron директориях''':
<code>find /etc/cron.* -type f -executable</code>
+
<pre>find /etc/cron.* -type f -executable</pre>
  
== 10. Примеры практических задач ===
+
== 10. Примеры практических задач ==
  
 
=== Резервное копирование ===
 
=== Резервное копирование ===
  
 
1. '''Ежедневное резервное копирование базы данных''':
 
1. '''Ежедневное резервное копирование базы данных''':
<code>0 2 * * * /usr/local/bin/mysql-backup.sh</code>
+
<pre>0 2 * * * /usr/local/bin/mysql-backup.sh</pre>
  
 
2. '''Еженедельное резервное копирование файлов''':
 
2. '''Еженедельное резервное копирование файлов''':
<code>0 3 * * 0 /usr/local/bin/files-backup.sh</code>
+
<pre>0 3 * * 0 /usr/local/bin/files-backup.sh</pre>
  
 
3. '''Ежемесячная очистка старых бэкапов''':
 
3. '''Ежемесячная очистка старых бэкапов''':
<code>0 4 1 * * /usr/local/bin/cleanup-old-backups.sh</code>
+
<pre>0 4 1 * * /usr/local/bin/cleanup-old-backups.sh</pre>
  
 
=== Мониторинг системы ===
 
=== Мониторинг системы ===
  
 
1. '''Проверка дискового пространства каждые 6 часов''':
 
1. '''Проверка дискового пространства каждые 6 часов''':
<code>0 */6 * * * /usr/local/bin/disk-check.sh</code>
+
<pre>0 */6 * * * /usr/local/bin/disk-check.sh</pre>
  
 
2. '''Мониторинг загрузки системы''':
 
2. '''Мониторинг загрузки системы''':
<code>*/15 * * * * /usr/local/bin/load-monitor.sh</code>
+
<pre>*/15 * * * * /usr/local/bin/load-monitor.sh</pre>
  
 
3. '''Проверка доступности сервисов''':
 
3. '''Проверка доступности сервисов''':
<code>*/5 * * * * /usr/local/bin/service-check.sh</code>
+
<pre>*/5 * * * * /usr/local/bin/service-check.sh</pre>
  
 
=== Обслуживание системы ===
 
=== Обслуживание системы ===
  
 
1. '''Очистка временных файлов''':
 
1. '''Очистка временных файлов''':
<code>0 1 * * * /usr/local/bin/cleanup-temp.sh</code>
+
<pre>0 1 * * * /usr/local/bin/cleanup-temp.sh</pre>
  
 
2. '''Ротация логов''':
 
2. '''Ротация логов''':
<code>0 0 * * * /usr/local/bin/log-rotate.sh</code>
+
<pre>0 0 * * * /usr/local/bin/log-rotate.sh</pre>
  
 
3. '''Обновление системы''':
 
3. '''Обновление системы''':
<code>0 4 * * 1 /usr/local/bin/system-update.sh</code>
+
<pre>0 4 * * 1 /usr/local/bin/system-update.sh</pre>
  
== 11. Устранение неполадок ===
+
== 11. Устранение неполадок ==
  
 
=== Частые проблемы ===
 
=== Частые проблемы ===
  
 
1. '''Cron задачи не выполняются''':
 
1. '''Cron задачи не выполняются''':
* Проверьте статус сервиса: <code>systemctl status cron</code>
+
* Проверьте статус сервиса: <pre>systemctl status cron</pre>
 
* Проверьте синтаксис crontab
 
* Проверьте синтаксис crontab
 
* Проверьте права доступа к скриптам
 
* Проверьте права доступа к скриптам
Строка 387: Строка 387:
  
 
1. '''Проверка статуса cron''':
 
1. '''Проверка статуса cron''':
<code>systemctl status cron</code>
+
<pre>systemctl status cron</pre>
  
 
2. '''Проверка логов''':
 
2. '''Проверка логов''':
<code>tail -f /var/log/syslog | grep CRON</code>
+
<pre>tail -f /var/log/syslog | grep CRON</pre>
  
 
3. '''Тестирование задач''':
 
3. '''Тестирование задач''':
<code>sudo run-parts /etc/cron.daily</code>
+
<pre>sudo run-parts /etc/cron.daily</pre>
  
 
4. '''Проверка синтаксиса crontab''':
 
4. '''Проверка синтаксиса crontab''':
<code>crontab -l | crontab -</code>
+
<pre>crontab -l | crontab -</pre>
  
 
== Заключение ==
 
== Заключение ==

Текущая версия на 10:31, 15 октября 2025

Содержание

Настройка cron задач и планировщика

1. Подготовка системы

  • Войдите в систему под учетной записью с правами root или пользователя с правами sudo.
  • Убедитесь, что у вас есть доступ к серверу через SSH или консоль.

2. Установка и настройка cron

Проверка установки cron

1. Проверьте, установлен ли cron:

which cron
systemctl status cron

2. Если не установлен, установите:

sudo apt update
sudo apt install -y cron

3. Запустите и включите автозапуск:

sudo systemctl start cron
sudo systemctl enable cron

4. Проверьте статус:

sudo systemctl status cron

Настройка cron

1. Отредактируйте crontab для root:

sudo crontab -e

2. Отредактируйте crontab для текущего пользователя:

crontab -e

3. Просмотр текущих задач:

crontab -l

4. Удаление всех задач:

crontab -r

3. Синтаксис cron

Формат времени

Cron использует следующий формат:

минута час день месяц день_недели команда
    • Поля времени:**
  • Минута: 0-59
  • Час: 0-23
  • День месяца: 1-31
  • Месяц: 1-12 или JAN-DEC
  • День недели: 0-7 (0 и 7 = воскресенье) или SUN-SAT

Примеры расписания

1. Каждую минуту:

* * * * * команда

2. Каждый час в 0 минут:

0 * * * * команда

3. Каждый день в 2:30 утра:

30 2 * * * команда

4. Каждый понедельник в 9:00:

0 9 * * 1 команда

5. Каждый месяц 1 числа в 12:00:

0 12 1 * * команда

6. Каждые 15 минут:

*/15 * * * * команда

7. С понедельника по пятницу в 18:00:

0 18 * * 1-5 команда

8. В определенные дни месяца:

0 0 1,15 * * команда

4. Создание cron задач

Базовые задачи

1. Резервное копирование каждый день в 3:00:

0 3 * * * /usr/local/bin/backup.sh

2. Очистка логов каждую неделю:

0 2 * * 0 /usr/local/bin/cleanup-logs.sh

3. Обновление системы каждую неделю:

0 4 * * 1 /usr/bin/apt update && /usr/bin/apt upgrade -y

4. Мониторинг дискового пространства:

0 */6 * * * /usr/local/bin/disk-monitor.sh

Задачи с переменными окружения

1. Настройка переменных окружения:

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=admin@example.com

0 3 * * * /usr/local/bin/backup.sh

2. Задача с перенаправлением вывода:

0 2 * * * /usr/local/bin/cleanup.sh >> /var/log/cleanup.log 2>&1

Задачи с условиями

1. Выполнение только в рабочие дни:

0 9 * * 1-5 /usr/local/bin/daily-report.sh

2. Выполнение только в определенные месяцы:

0 0 1 1,4,7,10 * /usr/local/bin/quarterly-task.sh

5. Управление cron задачами

Просмотр задач

1. Просмотр задач текущего пользователя:

crontab -l

2. Просмотр задач другого пользователя:

sudo crontab -l -u username

3. Просмотр системных задач:

sudo cat /etc/crontab

4. Просмотр задач в /etc/cron.d/:

sudo ls -la /etc/cron.d/

Редактирование задач

1. Редактирование crontab:

crontab -e

2. Редактирование crontab другого пользователя:

sudo crontab -e -u username

3. Импорт задач из файла:

crontab /path/to/crontab-file

Удаление задач

1. Удаление всех задач пользователя:

crontab -r

2. Удаление задач другого пользователя:

sudo crontab -r -u username

3. Удаление конкретной задачи: Отредактируйте crontab и удалите нужную строку

6. Системные cron директории

/etc/crontab

1. Отредактируйте системный crontab:

sudo nano /etc/crontab

2. Добавьте системные задачи:

\# Системные задачи
0 3 * * * root /usr/local/bin/system-backup.sh
0 4 * * 0 root /usr/local/bin/weekly-maintenance.sh

/etc/cron.d/

1. Создайте файл для конкретного сервиса:

sudo nano /etc/cron.d/my-service

2. Добавьте задачи:

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=admin@example.com

0 2 * * * root /usr/local/bin/service-backup.sh

Специальные директории

1. /etc/cron.hourly/ - выполняется каждый час 2. /etc/cron.daily/ - выполняется каждый день 3. /etc/cron.weekly/ - выполняется каждую неделю 4. /etc/cron.monthly/ - выполняется каждый месяц

Создание скрипта для ежедневного выполнения

1. Создайте скрипт:

sudo nano /etc/cron.daily/my-daily-script

2. Добавьте содержимое:

\#!/bin/bash
\# Ежедневная задача
echo "Daily task executed at $(date)" >> /var/log/daily-task.log
/usr/local/bin/backup.sh

3. Сделайте скрипт исполняемым:

sudo chmod +x /etc/cron.daily/my-daily-script

7. Мониторинг и логирование

Просмотр логов cron

1. Просмотр системных логов:

sudo tail -f /var/log/syslog | grep CRON

2. Просмотр логов cron:

sudo tail -f /var/log/cron.log

3. Поиск ошибок в логах:

sudo grep "CRON" /var/log/syslog | grep -i error

Настройка уведомлений

1. Настройка MAILTO в crontab:

MAILTO=admin@example.com
0 3 * * * /usr/local/bin/backup.sh

2. Отключение уведомлений:

MAILTO=""
0 3 * * * /usr/local/bin/backup.sh

3. Перенаправление вывода в файл:

0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

Создание скрипта мониторинга

1. Создайте скрипт мониторинга:

nano /usr/local/bin/cron-monitor.sh

2. Добавьте содержимое:

\#!/bin/bash

\# Проверка статуса cron
if ! systemctl is-active --quiet cron; then
    echo "CRON service is not running!" | mail -s "CRON Alert" admin@example.com
fi

\# Проверка последнего выполнения задач
LAST_BACKUP=$(stat -c %Y /var/log/backup.log 2>/dev/null || echo 0)
CURRENT_TIME=$(date +%s)
TIME_DIFF=$((CURRENT_TIME - LAST_BACKUP))

if [ $TIME_DIFF -gt 86400 ]; then
    echo "Backup task has not run in the last 24 hours!" | mail -s "Backup Alert" admin@example.com
fi

3. Сделайте скрипт исполняемым:

chmod +x /usr/local/bin/cron-monitor.sh

4. Добавьте в crontab:

0 */6 * * * /usr/local/bin/cron-monitor.sh

8. Продвинутые настройки

Использование anacron

1. Установите anacron:

sudo apt install -y anacron

2. Настройте anacron:

sudo nano /etc/anacrontab

3. Добавьте задачи:

\# /etc/anacrontab
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

\# Задачи anacron
1 5 cron.daily run-parts /etc/cron.daily
7 10 cron.weekly run-parts /etc/cron.weekly
@monthly 15 cron.monthly run-parts /etc/cron.monthly

Использование at

1. Установите at:

sudo apt install -y at

2. Запустите atd:

sudo systemctl start atd
sudo systemctl enable atd

3. Планирование разовых задач:

echo "backup.sh" | at 3:00 tomorrow
echo "maintenance.sh" | at now + 1 hour

4. Просмотр очереди at:

atq

5. Удаление задачи из очереди:

atrm job_number

9. Безопасность cron

Ограничение доступа

1. Разрешить cron только определенным пользователям:

sudo nano /etc/cron.allow
root
admin
backup-user

2. Запретить cron определенным пользователям:

sudo nano /etc/cron.deny
guest
test-user

Проверка безопасности

1. Проверка прав доступа к crontab файлам:

ls -la /var/spool/cron/crontabs/

2. Проверка системных cron файлов:

ls -la /etc/cron.d/

3. Проверка исполняемых файлов в cron директориях:

find /etc/cron.* -type f -executable

10. Примеры практических задач

Резервное копирование

1. Ежедневное резервное копирование базы данных:

0 2 * * * /usr/local/bin/mysql-backup.sh

2. Еженедельное резервное копирование файлов:

0 3 * * 0 /usr/local/bin/files-backup.sh

3. Ежемесячная очистка старых бэкапов:

0 4 1 * * /usr/local/bin/cleanup-old-backups.sh

Мониторинг системы

1. Проверка дискового пространства каждые 6 часов:

0 */6 * * * /usr/local/bin/disk-check.sh

2. Мониторинг загрузки системы:

*/15 * * * * /usr/local/bin/load-monitor.sh

3. Проверка доступности сервисов:

*/5 * * * * /usr/local/bin/service-check.sh

Обслуживание системы

1. Очистка временных файлов:

0 1 * * * /usr/local/bin/cleanup-temp.sh

2. Ротация логов:

0 0 * * * /usr/local/bin/log-rotate.sh

3. Обновление системы:

0 4 * * 1 /usr/local/bin/system-update.sh

11. Устранение неполадок

Частые проблемы

1. Cron задачи не выполняются:

  • Проверьте статус сервиса:
    systemctl status cron
  • Проверьте синтаксис crontab
  • Проверьте права доступа к скриптам
  • Проверьте переменные окружения

2. Задачи выполняются, но не работают:

  • Проверьте пути к исполняемым файлам
  • Проверьте права доступа к файлам
  • Добавьте логирование в скрипты
  • Проверьте переменные окружения

3. Проблемы с уведомлениями:

  • Настройте MAILTO
  • Проверьте настройки почты
  • Используйте перенаправление в файлы

Диагностика

1. Проверка статуса cron:

systemctl status cron

2. Проверка логов:

tail -f /var/log/syslog | grep CRON

3. Тестирование задач:

sudo run-parts /etc/cron.daily

4. Проверка синтаксиса crontab:

crontab -l | crontab -

Заключение

Cron успешно настроен и готов к работе! Теперь вы можете автоматизировать выполнение задач по расписанию.

Для размещения ваших автоматизированных систем на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):

Наши специалисты помогут с настройкой cron и оптимизацией автоматизации ваших задач!