# Решения

Для проверки расписания вы можете использовать сайт https://crontab.guru/, https://cronheatmap.com и аналоги. 

### 0.
Проверьте наличие команд cron и at в системе. Установите их в случае отсутствия.
```bash
sudo apt install cron at
```

### 1.
Выведите документацию crontab и cron.
```bash
man crontab
man cron
```

### 2.
Создайте cron расписание для выполнения скрипта или к:
``` bash
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;
# │ │ │ │ │                                   7 is also Sunday on some systems)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * <command to execute>

# 1. дважды в день: в 5 утра и в 5 вечера,
0 5,17 * * * /sbin/script.sh
# 2. в 3:15 каждый день,
15 15 * * * /sbin/script.sh
# 3. в 8 вечера каждую неделю,
0 20 * * 1 /sbin/script.sh
# 4. по понедельникам в 20:00,
0 20 * * 1 /sbin/script.sh
# 5. в 20:00 по понедельникам и по субботам,
0 20 * * 1,6 /sbin/script.sh
# 6. каждую минуту,
* * * * * /sbin/script.sh
# 7. каждые 10 минут,
*/10 * * * * /sbin/script.sh
# 8. каждые 15 минут по субботам и понедельникам,
*/15 * * * 1,6 /sbin/script.sh
# 9. каждую минуту в марте, июне, сентябре и декабре,
* * * 3,6,9,12 /sbin/script.sh
# 10. 20 января в 8 вечера,
0 20 20 1 * /sbin/script.sh
# 11. ежедневное выполнение скрипта в 8 вечера каждый второй месяц,
0 20 * */2 * /sbin/script.sh
# 12. *в первое воскресенье каждого месяца,
0 0 * * 0 [ $(date +%d) -le 07 ] && /script/script.sh
# 13. каждые три часа,
0 */3 * * * /sbin/script.sh
# 14. дважды, каждую субботу и понедельник,
0 0 * * 1,6 /sbin/script.sh
# 15. *каждые 30 секунд,
* * * * * /sbin/script.sh
* * * * * sleep 30; /sbin/script.sh
# 16. каждый день в летний период,
0 0 * 6,7,8 * /sbin/script.sh
# 17. для рассылки поздравлений с новым годом,
0 0 1 1 * /sbin/happy_new_year_mail.sh
# 18. ежедневного удаления неиспользуемых пакетов в системе,
0 1 * * * apt autoremove
# 19. перезапуска системы в 0 часов 0 минут,
0 0 * * * shutdown -h 0
# 20. для очистки всех попыток сбоя входа в систему ежедневно в 1:00,
0 1 * * * /sbin/clear_auth_errors.sh
# 21. ежедневной проверки и загрузки новых системных пакетов,
0 0 * * * apt update
# 22. ежедневного обновления пакетов системы,
0 0 * * * apt upgrade -y
# 23. ежедневное резервное копирование всех папок пользователей в 5 утра.
0 5 * * * tar -zcf /var/backups/home.tgz /home/
```
### 3.
Создайте задание в котором отчёты cron будут отправляться вам на внешний почтовый ящик.
```
MAILTO=logs@myoffice.org
```

### 4.
Установите пользовательский сrontab.
```
sudo echo "stud" >> /etc/cron.allow
crontab -e
```

### 5.
Настройте выполнение исполняемого файла script.sh из `/usr/sbin/` каждую среду, модифицировав `PATH` в cron задании.
```bash
PATH=/opt/cmake/bin:$PATH
0 0 * * 3 /usr/sbin/script.sh
```

### 6.
Пользуясь полномочиями суперпользователя, запретите пользователю mike выполнять команду at.
```
sudo echo "mike" >> /etc/at.deny
```

### 7.
Запланируйте командой at: 
``` bash
# 1. выполнение скрипта сегодня в 9 часов,
at 21:00 script.sh
# 2. перезагрузку через 2 часа,
sudo at now + 2 hours reboot
# 3. выполнение команды через 100 лет.
at now + 100 years script.sh
```

# Справка

Релевантные файлы:
 - /etc/cron.allow
 - /etc/cron.deny
 - /var/spool/cron/crontabs
 - /var/spool/cron/atjobs
 - /var/spool/cron/atspool
 - /proc/loadavg
 - /var/run/utmp
 - /etc/at.allow
 - /etc/at.deny

Релевантные команды:
 - cron
 - at
 - crontab