Вопрос или проблема
Я добавляю настройку crontab в файл /etc/crontab
:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# Подробности см. в man 4 crontabs
# Пример определения задания:
# .---------------- минута (0 - 59)
# | .------------- час (0 - 23)
# | | .---------- день месяца (1 - 31)
# | | | .------- месяц (1 - 12) ИЛИ jan,feb,mar,apr ...
# | | | | .---- день недели (0 - 6) (воскресенье=0 или 7) ИЛИ sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * имя-пользователя команда для выполнения
0 0 */1 * * root chmod +x /root/source/auto-renew.sh && /root/source/auto-renew.sh >> /root/source/auto-renew-cron.log 2>&1
когда я использую crontab -l, это задание crontab не отображается:
[root@iZm5e2jhfbrshckqh6qdbuZ cron.d]# crontab -l
45 6 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
почему crontab -l
не показывает задание из /etc/crontab
? это лог:
[root@iZm5e2jhfbrshckqh6qdbuZ cron.d]# journalctl -u crond
-- Логи начинаются с Ср 2024-11-20 15:32:06 CST, заканчиваются Ср 2025-01-01 13:54:30 CST. --
Nov 20 16:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1444408]: (root) CMD (run-parts /etc/cron.hourly)
Nov 20 17:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1486477]: (root) CMD (run-parts /etc/cron.hourly)
Nov 20 18:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1528604]: (root) CMD (run-parts /etc/cron.hourly)
Nov 20 19:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1570709]: (root) CMD (run-parts /etc/cron.hourly)
Nov 20 20:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1612872]: (root) CMD (run-parts /etc/cron.hourly)
Nov 20 21:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1655340]: (root) CMD (run-parts /etc/cron.hourly)
Nov 20 22:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1697643]: (root) CMD (run-parts /etc/cron.hourly)
Nov 20 23:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1739698]: (root) CMD (run-пarts /etc/cron.hourly)
Nov 21 00:00:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1781104]: (root) CMD (chmod +x /root/source/auto-renew.sh && /root/source/auto-renew.sh >> /root/source/auto-renew-cron.log 2>&1)
Nov 21 00:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1781971]: (root) CMD (run-parts /etc/cron.hourly)
Nov 21 00:01:01 iZm5e2jhfbrshckqh6qdbuZ anacron[1781980]: Anacron запущен 2024-11-21
Nov 21 00:01:01 iZm5e2jhfbrshckqh6qdbuZ anacron[1781980]: Нормальное завершение (0 заданий выполнено)
Nov 21 01:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1824103]: (root) CMD (run-пarts /etc/cron.hourly)
Nov 21 01:01:01 iZm5e2jhfbrshckqh6qdbuZ anacron[1824112]: Anacron запущен 2024-11-21
Nov 21 01:01:01 iZm5e2jhfbrshckqh6qdbuZ anacron[1824112]: Нормальное завершение (0 заданий выполнено)
Nov 21 02:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1866166]: (root) CMD (run-parts /etc/cron.hourly)
Nov 21 02:01:01 iZm5e2jhfbrshckqh6qdbuZ anacron[1866175]: Anacron запущен 2024-11-21
Nov 21 02:01:01 iZm5e2jhfbrshckqh6qdbuZ anacron[1866175]: Нормальное завершение (0 заданий выполнено)
Nov 21 03:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1908181]: (root) CMD (run-parts /etc/cron.hourly)
Nov 21 03:01:01 iZm5e2jhfbrshckqh6qdbuZ anacron[1908190]: Anacron запущен 2024-11-21
Nov 21 03:01:01 iZm5e2jhfbrshckqh6qdbuZ anacron[1908190]: Запустит задание `cron.daily' через 50 мин.
Nov 21 03:01:01 iZm5e2jhfbrshckqh6qdbuZ anacron[1908190]: Задания будут выполнены последовательно
Nov 21 03:51:01 iZm5e2jhfbrshckqh6qdbuZ anacron[1908190]: Задание `cron.daily' начато
Nov 21 03:51:01 iZm5е2jhfbrshckqh6qdbuZ anacron[1908190]: Задание `cron.daily' завершено
Nov 21 03:51:01 iZm5е2jhfbrshckqh6qdbuZ anacron[1908190]: Нормальное завершение (1 задание выполнено)
Nov 21 04:01:01 iZm5е2jhfbrshckqh6qdbuZ CROND[1950218]: (root) CMD (run-пarts /etc/cron.hourly)
Nov 21 05:01:01 iZm5е2jhfbrshckqh6qdbuZ CROND[1992303]: (root) CMD (run-пarts /etc/cron.hourly)
Nov 21 06:01:01 iZm5е2jhfbrshckqh6qdbuZ CROND[2034382]: (root) CMD (run-пarts /etc/cron.hourly)
Nov 21 07:01:01 iZm5е2jhfbrshckqh6qdbuZ CROND[2076636]: (root) CMD (run-parts /etc/cron.hourly)
Nov 21 08:01:01 iZm5е2jhfbrshckqh6qdbuZ CROND[2118744]: (root) CMD (run-parts /etc/cron.hourly)
Nov 21 09:01:01 iZm5е2jhfbrshckqh6qdbuZ CROND[2160824]: (root) CMD (run-parts /etc/cron.hourly)
Nov 21 10:01:01 iZm5е2jhfbrshckqh6qdbuZ CROND[2203126]: (root) CMD (run-parts /etc/cron.hourly)
Nov 21 11:01:01 iZm5е2jhfbrshckqh6qdbuZ CROND[2245206]: (root) CMD (run-parts /etc/cron.hourly)
Ответ или решение
Вопрос о том, почему команда crontab -l
не отображает задания, которые вы добавили в файл /etc/crontab
, имеет простое и логическое объяснение, которое связано с архитектурой и принципами работы cron в Unix-системах.
Почему crontab -l
не показывает задания из /etc/crontab
?
-
Разделение crontab’ов:
В Unix-системах есть несколько уровней crontab’ов:
- Пользовательские crontab’ы: Они управляются командами
crontab
, такими какcrontab -e
для редактирования иcrontab -l
для просмотра. Эти файлы находятся в/var/spool/cron/crontabs/
и контролируются самим пользователем. - системные crontab’ы: Файлы, такие как
/etc/crontab
, и файлы внутри/etc/cron.d/
управляются непосредственно администратором системы. Они используются для заданий, которые должны выполняться от имени системы или определенных пользователей, без необходимости заходить под аккаунт этого пользователя.
- Пользовательские crontab’ы: Они управляются командами
-
Назначение
crontab -l
:Команда
crontab -l
предназначена для отображения всех cron задач, назначенных текущему пользователю. Она работает только с пользовательскими crontab’ами, которые были установлены с использованием командыcrontab
. Так как вы вносите изменения в системный файл/etc/crontab
, они не будут видны при использованииcrontab -l
, поскольку этот файл независим от пользовательского crontab. -
/etc/crontab — уникальность:
В файле
/etc/crontab
присутствует дополнительное поле, которое определяет, от имени какого пользователя должно выполняться задание. Это отличает его от обычных пользовательских crontab’ов и требует другого подхода для подачи заданий.
Как просматривать системные crontab’ы?
Для проверки заданий, содержащихся в системных crontab’ах:
- Откройте файлы вручную: Используйте текстовый редактор, такой как
nano
илиvim
, чтобы открыть и просмотреть содержимое/etc/crontab
или файлов в/etc/cron.d/
. - *Проверьте скрипты в /etc/cron. папках**: Эти папки могут содержать дополнительные задания, организованные по частоте выполнения — ежедневно, еженедельно и т. д.
Заключение
Ваше задание, добавленное в /etc/crontab
, корректно зарегистрировано и выполняется, что подтверждают журнальные записи (journalctl -u crond
), свидетельствующие об успешном выполнении скрипта. Однако это задание не будет отображаться через crontab -l
, так как это разные контексты crontab’ов.
Поддержание понимание различий между системными и пользовательскими crontab — это часть эффективного управления задачами на Unix-системах. Если у вас есть какие-либо другие вопросы или проблемные зоны по теме cron, пожалуйста, дайте знать!